|
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