|
4 | 4 | import json
|
5 | 5 | import shutil
|
6 | 6 |
|
| 7 | + |
| 8 | +def write_csproj_prefix(ioWrapper): |
| 9 | + ioWrapper.write('<Project Sdk="Microsoft.NET.Sdk">\n') |
| 10 | + ioWrapper.write(' <PropertyGroup>\n') |
| 11 | + ioWrapper.write(' <TargetFramework>net5.0</TargetFramework>\n') |
| 12 | + ioWrapper.write(' <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n') |
| 13 | + ioWrapper.write(' <OutputPath>bin\</OutputPath>\n') |
| 14 | + ioWrapper.write( |
| 15 | + ' <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>\n') |
| 16 | + ioWrapper.write(' </PropertyGroup>\n\n') |
| 17 | + |
| 18 | + |
7 | 19 | print('Script to generate stub file from a nuget package')
|
8 | 20 | print(' Usage: python ' + sys.argv[0] +
|
9 | 21 | ' NUGET_PACKAGE_NAME [VERSION=latest] [WORK_DIR=tempDir]')
|
|
78 | 90 | '--name', rawSrcOutputDirName, '--output', rawSrcOutputDir])
|
79 | 91 | helpers.remove_files(rawSrcOutputDir, '.cs')
|
80 | 92 |
|
81 |
| -# load json from file |
| 93 | +# load json from query result file and split it into separate .cs files |
82 | 94 | pathInfos = {}
|
83 | 95 | with open(jsonFile) as json_data:
|
84 | 96 | data = json.load(json_data)
|
|
94 | 106 |
|
95 | 107 | print("\n --> Generated (formatted) stub files: " + rawSrcOutputDir)
|
96 | 108 |
|
97 |
| - |
98 | 109 | print("\n* Processing project.assets.json to generate folder structure")
|
99 | 110 | stubsDirName = 'stubs'
|
100 | 111 | stubsDir = os.path.join(outputDir, stubsDirName)
|
|
124 | 135 | print(' * Processing package: ' + name + '/' + version)
|
125 | 136 | with open(os.path.join(packageDir, name + '.csproj'), 'a') as pf:
|
126 | 137 |
|
127 |
| - pf.write('<Project Sdk="Microsoft.NET.Sdk">\n') |
128 |
| - pf.write(' <PropertyGroup>\n') |
129 |
| - pf.write(' <TargetFramework>net5.0</TargetFramework>\n') |
130 |
| - pf.write(' <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n') |
131 |
| - pf.write(' <OutputPath>bin\</OutputPath>\n') |
132 |
| - pf.write( |
133 |
| - ' <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>\n') |
134 |
| - pf.write(' </PropertyGroup>\n\n') |
| 138 | + write_csproj_prefix(pf) |
135 | 139 | pf.write(' <ItemGroup>\n')
|
136 | 140 |
|
137 | 141 | dlls = set()
|
|
167 | 171 | pf.write(' <ProjectReference Include="../../' +
|
168 | 172 | frameworksDirName + '/' + framework + '/' + framework + '.csproj" />\n')
|
169 | 173 |
|
| 174 | + pf.write(' <ProjectReference Include="../../' + |
| 175 | + frameworksDirName + '/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj" />\n') |
| 176 | + |
170 | 177 | pf.write(' </ItemGroup>\n')
|
171 | 178 | pf.write('</Project>\n')
|
172 | 179 |
|
| 180 | +# Processing references frameworks |
173 | 181 | for framework in frameworks:
|
174 | 182 | with open(os.path.join(frameworksDir, framework, framework + '.csproj'), 'a') as pf:
|
175 | 183 |
|
176 |
| - pf.write('<Project Sdk="Microsoft.NET.Sdk">\n') |
177 |
| - pf.write(' <PropertyGroup>\n') |
178 |
| - pf.write(' <TargetFramework>net5.0</TargetFramework>\n') |
179 |
| - pf.write(' <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n') |
180 |
| - pf.write(' <OutputPath>bin\</OutputPath>\n') |
| 184 | + write_csproj_prefix(pf) |
| 185 | + pf.write(' <ItemGroup>\n') |
181 | 186 | pf.write(
|
182 |
| - ' <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>\n') |
183 |
| - pf.write(' </PropertyGroup>\n') |
| 187 | + ' <ProjectReference Include="../Microsoft.NETCore.App/Microsoft.NETCore.App.csproj" />\n') |
| 188 | + pf.write(' </ItemGroup>\n') |
184 | 189 | pf.write('</Project>\n')
|
185 | 190 |
|
186 | 191 | for pathInfo in pathInfos:
|
|
189 | 194 | shutil.copy2(pathInfos[pathInfo], os.path.join(
|
190 | 195 | frameworksDir, framework))
|
191 | 196 |
|
| 197 | +# Processing assemblies in Microsoft.NETCore.App.Ref |
| 198 | +frameworkDir = os.path.join(frameworksDir, 'Microsoft.NETCore.App') |
| 199 | +if not os.path.exists(frameworkDir): |
| 200 | + os.makedirs(frameworkDir) |
| 201 | +with open(os.path.join(frameworksDir, 'Microsoft.NETCore.App', 'Microsoft.NETCore.App.csproj'), 'a') as pf: |
| 202 | + write_csproj_prefix(pf) |
| 203 | + pf.write('</Project>\n') |
| 204 | + |
| 205 | + for pathInfo in pathInfos: |
| 206 | + if 'packs/microsoft.netcore.app.ref/' in pathInfo.lower(): |
| 207 | + copiedFiles.add(pathInfo) |
| 208 | + shutil.copy2(pathInfos[pathInfo], frameworkDir) |
| 209 | + |
192 | 210 | for pathInfo in pathInfos:
|
193 | 211 | if pathInfo not in copiedFiles:
|
194 | 212 | print('Not copied to nuget or framework folder: ' + pathInfo)
|
|
199 | 217 |
|
200 | 218 | print("\n --> Generated structured stub files: " + stubsDir)
|
201 | 219 |
|
202 |
| -print("\n* Building raw output project") |
203 |
| -helpers.run_cmd(['dotnet', 'build', '/t:rebuild', '/p:AllowUnsafeBlocks=true', '/p:WarningLevel=0', rawSrcOutputDir], |
204 |
| - 'ERR: Build failed. Script failed to generate a stub that builds. Please touch up manually the stubs.') |
205 |
| - |
206 |
| -print("\n --> Generated structured stub files: " + stubsDir) |
207 |
| - |
208 | 220 | exit(0)
|
0 commit comments