Skip to content

Commit 212fb54

Browse files
authored
Use shipping runtime.json for RID targeting (#80074)
* Use shipping runtime.json for RID targeting - Use the shipping runtime.json file to target RIDs when building instead of the custom OSGroups.json which only contained a subset of the available rids. - To facilitate that, lower-case the existing platforms in the target frameworks strings which is the expected format anyway by the SDK and msbuild. This will eventually make it possible to bring some of the custom build infrastructure back into the SDK. - Remove a few outdated code pieces and update docs.
1 parent 88dd8c7 commit 212fb54

File tree

106 files changed

+307
-366
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

106 files changed

+307
-366
lines changed

docs/coding-guidelines/project-guidelines.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ Non cross-targeting project that targets .NETStandard:
5151
A cross-targeting project which targets specific platform with `$(NetCoreAppCurrent)` and one .NETFramework tfm:
5252
```
5353
<PropertyGroup>
54-
<TargetFrameworks>$(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetFrameworkMinimum)</TargetFrameworks>
54+
<TargetFrameworks>$(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-unix;$(NetFrameworkMinimum)</TargetFrameworks>
5555
<PropertyGroup>
5656
```
5757

@@ -103,17 +103,17 @@ Example:
103103
Example:
104104
```
105105
<PropertyGroup>
106-
<TargetFrameworks>$(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)</TargetFrameworks>
106+
<TargetFrameworks>$(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-osx;$(NetCoreAppCurrent)</TargetFrameworks>
107107
</PropertyGroup>
108108
<ItemGroup Condition="'$(TargetPlatformIdentifier)' == 'windows'">...</ItemGroup>
109-
<ItemGroup Condition="'$(TargetPlatformIdentifier)' == 'OSX'">...</ItemGroup>
109+
<ItemGroup Condition="'$(TargetPlatformIdentifier)' == 'osx'">...</ItemGroup>
110110
```
111111
Important: In contrast to the old `Targets*` checks, `TargetPlatformIdentifier` conditions apply to a single tfm only, inheritance between target frameworks can't be expressed. See the example below for Unix:
112112
```
113113
<PropertyGroup>
114-
<TargetFrameworks>$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-android;$(NetCoreAppCurrent)-windows</TargetFrameworks>
114+
<TargetFrameworks>$(NetCoreAppCurrent)-unix;$(NetCoreAppCurrent)-linux;$(NetCoreAppCurrent)-android;$(NetCoreAppCurrent)-windows</TargetFrameworks>
115115
</PropertyGroup>
116-
<ItemGroup Condition="'$(TargetPlatformIdentifier)' == 'Unix' or '$(TargetPlatformIdentifier)' == 'Linux' or '$(TargetPlatformIdentifier)' == 'android'">...</ItemGroup>
116+
<ItemGroup Condition="'$(TargetPlatformIdentifier)' == 'unix' or '$(TargetPlatformIdentifier)' == 'linux' or '$(TargetPlatformIdentifier)' == 'android'">...</ItemGroup>
117117
<!-- Negations make such conditions easier to write and read. -->
118118
<ItemGroup Condition="'$(TargetPlatformIdentifier)' != 'windows'">...</ItemGroup>
119119
```
@@ -190,7 +190,7 @@ All test outputs should be under
190190
In the gen directory any source generator related to the assembly should exist. This does not mean the source generator is only used for that assembly only that it is conceptually apart of that assembly. For example, the assembly may provide attributes or low-level types the source generator uses.
191191
To consume a source generator, simply add a `<ProjectReference Include="..." ReferenceOutputAssembly="false" OutputItemType="Analyzer" />` item to the project, usually next to the `Reference` and `ProjectReference` items.
192192

193-
A source generator must target `netstandard2.0` as such assemblies are loaded into the compiler's process which might run on either .NET Framework or modern .NET depending on the tooling being used (CLI vs Visual Studio). While that's true, a source project can still multi-target and include `$(NetCoreAppToolCurrent)` (which is the latest non live-built .NETCoreApp tfm that is supported by the SDK) to benefit from the ehancanced nullable reference type warnings emitted by the compiler. For an example see [System.Text.Json's roslyn4.4 source generator](/src/libraries/System.Text.Json/gen/System.Text.Json.SourceGeneration.Roslyn4.4.csproj). While the repository's infrastructure makes sure that only the source generator's `netstandard2.0` build output is included in packages, to consume such a multi-targeting source generator via a `ProjectReference` (as described above), you need to add the `ReferringTargetFramework=netstandard2.0` metadata to the ProjectReference item to guarantee that the netstandard2.0 asset is chosen.
193+
A source generator must target `netstandard2.0` as such assemblies are loaded into the compiler's process which might run on either .NET Framework or modern .NET depending on the tooling being used (CLI vs Visual Studio). While that's true, a source project can still multi-target and include `$(NetCoreAppToolCurrent)` (which is the latest non live-built .NETCoreApp tfm that is supported by the SDK) to benefit from the ehancanced nullable reference type warnings emitted by the compiler. For an example see [System.Text.Json's roslyn4.4 source generator](/src/libraries/System.Text.Json/gen/System.Text.Json.SourceGeneration.Roslyn4.4.csproj). While the repository's infrastructure makes sure that only the source generator's `netstandard2.0` build output is included in packages, to consume such a multi-targeting source generator via a `ProjectReference` (as described above), you need to add the `SetTargetFramework="TargetFramework=netstandard2.0"` metadata to the ProjectReference item to guarantee that the netstandard2.0 asset is chosen.
194194

195195
## Facades
196196
Facade are unique in that they don't have any code and instead are generated by finding a contract reference assembly with the matching identity and generating type forwards for all the types to where they live in the implementation assemblies (aka facade seeds). There are also partial facades which contain some type forwards as well as some code definitions. All the various build configurations should be contained in the one csproj file per library.

eng/Version.Details.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@
142142
<Uri>https://github.com/dotnet/arcade</Uri>
143143
<Sha>3003926e4126f827bca50d5b3ee179afc86d8a7b</Sha>
144144
</Dependency>
145-
<Dependency Name="Microsoft.DotNet.Build.Tasks.TargetFramework" Version="8.0.0-beta.22621.1">
145+
<Dependency Name="Microsoft.DotNet.Build.Tasks.TargetFramework" Version="8.0.0-beta.22630.1">
146146
<Uri>https://github.com/dotnet/arcade</Uri>
147147
<Sha>3003926e4126f827bca50d5b3ee179afc86d8a7b</Sha>
148148
</Dependency>

eng/Versions.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@
9090
<MicrosoftDotNetBuildTasksArchivesVersion>8.0.0-beta.22621.1</MicrosoftDotNetBuildTasksArchivesVersion>
9191
<MicrosoftDotNetBuildTasksInstallersVersion>8.0.0-beta.22621.1</MicrosoftDotNetBuildTasksInstallersVersion>
9292
<MicrosoftDotNetBuildTasksPackagingVersion>8.0.0-beta.22621.1</MicrosoftDotNetBuildTasksPackagingVersion>
93-
<MicrosoftDotNetBuildTasksTargetFrameworkVersion>8.0.0-beta.22621.1</MicrosoftDotNetBuildTasksTargetFrameworkVersion>
93+
<MicrosoftDotNetBuildTasksTargetFrameworkVersion>8.0.0-beta.23052.2</MicrosoftDotNetBuildTasksTargetFrameworkVersion>
9494
<MicrosoftDotNetBuildTasksTemplatingVersion>8.0.0-beta.22621.1</MicrosoftDotNetBuildTasksTemplatingVersion>
9595
<MicrosoftDotNetBuildTasksWorkloadsPackageVersion>8.0.0-beta.22621.1</MicrosoftDotNetBuildTasksWorkloadsPackageVersion>
9696
<MicrosoftDotNetRemoteExecutorVersion>8.0.0-beta.22621.1</MicrosoftDotNetRemoteExecutorVersion>

eng/illink.targets

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,18 +60,18 @@
6060
Must be enabled by setting BinPlaceILLinkTrimAssembly=true
6161
-->
6262
<ItemGroup Condition="'$(BinPlaceILLinkTrimAssembly)' == 'true'">
63-
<BinPlaceTargetFramework Include="$(NetCoreAppCurrentBuildSettings)">
63+
<BinPlaceTargetFrameworks Include="$(NetCoreAppCurrentBuildSettings)">
6464
<RuntimePath>$(ILLinkTrimAssemblyArtifactsRootDir)trimmed</RuntimePath>
6565
<ItemName>TrimmedItem</ItemName>
66-
</BinPlaceTargetFramework>
67-
<BinPlaceTargetFramework Include="$(NetCoreAppCurrentBuildSettings)">
66+
</BinPlaceTargetFrameworks>
67+
<BinPlaceTargetFrameworks Include="$(NetCoreAppCurrentBuildSettings)">
6868
<RuntimePath>$(ILLinkTrimAssemblyArtifactsRootDir)reports</RuntimePath>
6969
<ItemName>TrimmingReport</ItemName>
70-
</BinPlaceTargetFramework>
71-
<BinPlaceTargetFramework Include="$(NetCoreAppCurrentBuildSettings)">
70+
</BinPlaceTargetFrameworks>
71+
<BinPlaceTargetFrameworks Include="$(NetCoreAppCurrentBuildSettings)">
7272
<RuntimePath>$(ILLinkTrimAssemblyArtifactsRootDir)pretrimmed</RuntimePath>
7373
<ItemName>PreTrimmedItem</ItemName>
74-
</BinPlaceTargetFramework>
74+
</BinPlaceTargetFrameworks>
7575
</ItemGroup>
7676

7777
<ItemGroup>
@@ -89,7 +89,7 @@
8989
<RuntimePath>$(ILLinkTrimAssemblySuppressionsXmlsDir)</RuntimePath>
9090
<ItemName>ILLinkSuppressionsXmls</ItemName>
9191
</BinPlaceTargetFrameworks>
92-
<BinPlaceTargetFrameworks Include="$(NetCoreAppCurrent)-$(TargetOS)">
92+
<BinPlaceTargetFrameworks Include="$(NetCoreAppCurrent)-$(TargetOS.ToLowerInvariant())">
9393
<RuntimePath>$(ILLinkTrimAssemblySuppressionsXmlsDir)</RuntimePath>
9494
<ItemName>ILLinkSuppressionsXmls</ItemName>
9595
</BinPlaceTargetFrameworks>

eng/packaging.targets

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
<BeforePack>$(BeforePack);IncludeAnalyzersInPackage;AddNETStandardCompatErrorFileForPackaging</BeforePack>
1313
<TargetsForTfmSpecificContentInPackage>$(TargetsForTfmSpecificContentInPackage);AddRuntimeSpecificFilesToPackage;IncludeProjectReferencesWithPackAttributeInPackage</TargetsForTfmSpecificContentInPackage>
1414
<!-- Don't include target platform specific dependencies, since we use the target platform to represent RIDs instead -->
15-
<IncludeBuildOutput Condition="'$(TargetPlatformIdentifier)' != '' and '$(TargetFrameworkIdentifier)' == '.NETCoreApp'">false</IncludeBuildOutput>
16-
<SuppressDependenciesWhenPacking Condition="'$(TargetPlatformIdentifier)' != '' and '$(TargetFrameworkIdentifier)' == '.NETCoreApp'">true</SuppressDependenciesWhenPacking>
15+
<IncludeBuildOutput Condition="'$(PackageUsePlatformTargeting)' != 'true' and '$(TargetPlatformIdentifier)' != '' and '$(TargetFrameworkIdentifier)' == '.NETCoreApp'">false</IncludeBuildOutput>
16+
<SuppressDependenciesWhenPacking Condition="'$(PackageUsePlatformTargeting)' != 'true' and '$(TargetPlatformIdentifier)' != '' and '$(TargetFrameworkIdentifier)' == '.NETCoreApp'">true</SuppressDependenciesWhenPacking>
1717
<PackageDesignerMarkerFile>$(MSBuildThisFileDirectory)useSharedDesignerContext.txt</PackageDesignerMarkerFile>
1818
<PackageReadmeFile Condition="'$(PackageReadmeFile)' == '' and Exists('PACKAGE.md')">PACKAGE.md</PackageReadmeFile>
1919
<!-- Generate packages for rid specific projects or for allconfigurations during build. -->
@@ -31,6 +31,8 @@
3131
<!-- Search for the documentation file in the intellisense package and otherwise pick up the generated one. -->
3232
<LibIntellisenseDocumentationFilePath>$(XmlDocFileRoot)1033\$(AssemblyName).xml</LibIntellisenseDocumentationFilePath>
3333
<UseIntellisenseDocumentationFile Condition="'$(UseIntellisenseDocumentationFile)' == '' and Exists('$(LibIntellisenseDocumentationFilePath)')">true</UseIntellisenseDocumentationFile>
34+
<!-- During NoBuild pack invocations, skip project reference build. Necessary for the IncludeProjectReferencesWithPackAttributeInPackage target. -->
35+
<BuildProjectReferences Condition="'$(NoBuild)' == 'true'">false</BuildProjectReferences>
3436
</PropertyGroup>
3537

3638
<PropertyGroup Condition="'$(PreReleaseVersionLabel)' == 'servicing' and
@@ -122,7 +124,8 @@
122124
DocumentationProjectOutputGroup;
123125
SatelliteDllsProjectOutputGroup;
124126
$(TargetsForTfmSpecificBuildOutput)"
125-
Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp' and
127+
Condition="'$(PackageUsePlatformTargeting)' != 'true' and
128+
'$(TargetFrameworkIdentifier)' == '.NETCoreApp' and
126129
'$(TargetPlatformIdentifier)' != ''">
127130
<PropertyGroup>
128131
<RuntimeSymbolPath>$(TargetDir)$(TargetName).pdb</RuntimeSymbolPath>
@@ -244,14 +247,19 @@
244247
<Target Name="IncludeProjectReferencesWithPackAttributeInPackage"
245248
Condition="'@(ProjectReference)' != '' and @(ProjectReference->AnyHaveMetadataValue('Pack', 'true'))"
246249
DependsOnTargets="BuildOnlySettings;ResolveReferences">
250+
<PropertyGroup>
251+
<_referringTargetFramework>$(TargetFramework)</_referringTargetFramework>
252+
<_referringTargetFramework Condition="'$(PackageUsePlatformTargeting)' != 'true' and $(TargetFramework.Contains('-'))">$(TargetFramework.SubString(0, $(TargetFramework.IndexOf('-'))))</_referringTargetFramework>
253+
</PropertyGroup>
254+
247255
<ItemGroup>
248256
<!-- Add ReferenceCopyLocalPaths for ProjectReferences which are flagged as Pack="true" into the package. -->
249257
<_projectReferenceCopyLocalPaths Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference')->WithMetadataValue('Pack', 'true'))" />
250258
<TfmSpecificPackageFile Include="@(_projectReferenceCopyLocalPaths)"
251-
PackagePath="$([MSBuild]::ValueOrDefault('%(ReferenceCopyLocalPaths.PackagePath)', '$(BuildOutputTargetFolder)\$(TargetFramework)\'))" />
259+
PackagePath="$([MSBuild]::ValueOrDefault('%(ReferenceCopyLocalPaths.PackagePath)', '$(BuildOutputTargetFolder)\$(_referringTargetFramework)\'))" />
252260
<TfmSpecificDebugSymbolsFile Include="@(TfmSpecificPackageFile->WithMetadataValue('Extension', '.pdb'))"
253261
TargetPath="/%(TfmSpecificPackageFile.PackagePath)/%(Filename)%(Extension)"
254-
TargetFramework="$(TargetFramework)"
262+
TargetFramework="$(_referringTargetFramework)"
255263
Condition="'$(IncludeSymbols)' == 'true'" />
256264
<!-- Remove symbol from the non symbol package. -->
257265
<TfmSpecificPackageFile Remove="@(TfmSpecificPackageFile->WithMetadataValue('Extension', '.pdb'))" />
@@ -264,7 +272,7 @@
264272
<_referenceAssemblyPaths Include="@(_projectReferenceCopyLocalPaths->WithMetadataValue('Extension', '.dll')->WithMetadataValue('IncludeReferenceAssemblyInPackage', 'true')->Metadata('ReferenceAssembly'))" />
265273
<_referenceAssemblyPaths Include="@(_projectReferenceCopyLocalPaths->WithMetadataValue('Extension', '.xml')->WithMetadataValue('IncludeReferenceAssemblyInPackage', 'true'))" />
266274
<TfmSpecificPackageFile Include="@(_referenceAssemblyPaths)"
267-
PackagePath="ref\$(TargetFramework)\" />
275+
PackagePath="ref\$(_referringTargetFramework)\" />
268276
</ItemGroup>
269277
</Target>
270278

eng/resolveContract.targets

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,18 @@
2323

2424
<ItemGroup Condition="'$(HasMatchingContract)' == 'true' and '$(ContractProject)' != ''">
2525
<ProjectReference Include="$(ContractProject)" ReferenceOutputAssembly="false" OutputItemType="ResolvedMatchingContract" />
26-
<!-- We aren't referencing the contract, but make sure it's considered as an input to Compile so that if it changes we rebuild and rerun API compat -->
27-
<ProjectReference Include="$(ContractProject)" ReferenceOutputAssembly="false" OutputItemType="CustomAdditionalCompileInputs" />
2826
</ItemGroup>
2927

28+
<!-- We aren't referencing the contract, but make sure it's considered as an input to Compile so that if it changes we rebuild and rerun API compat -->
29+
<Target Name="AddResolvedMatchingContractToCompileInput"
30+
BeforeTargets="CoreCompile"
31+
AfterTargets="ResolveProjectReferences"
32+
Condition="'@(ResolvedMatchingContract)' != ''">
33+
<ItemGroup>
34+
<CustomAdditionalCompileInputs Include="@(ResolvedMatchingContract)" />
35+
</ItemGroup>
36+
</Target>
37+
3038
<!-- Allow P2Ps that target a source project to build against the corresponding ref project. -->
3139
<Target Name="AnnotateTargetPathWithTargetPlatformMonikerWithReferenceAssembly"
3240
Condition="'$(AnnotateTargetPathWithContract)' == 'true'"

eng/versioning.targets

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
</ItemGroup>
6363
</Target>
6464

65-
<PropertyGroup Condition="'$(TargetPlatformIdentifier)' == '' and !$(TargetFrameworks.Contains('$(TargetFramework)-Browser'))">
65+
<PropertyGroup Condition="'$(TargetPlatformIdentifier)' == '' and !$(TargetFrameworks.Contains('$(TargetFramework)-browser'))">
6666
<CrossPlatformAndHasNoBrowserTarget>true</CrossPlatformAndHasNoBrowserTarget>
6767
</PropertyGroup>
6868

@@ -75,17 +75,17 @@
7575
</ItemGroup>
7676

7777
<!-- Enables browser warnings for cross platform or Browser targeted builds -->
78-
<ItemGroup Condition="('$(TargetPlatformIdentifier)' == 'Browser' or '$(CrossPlatformAndHasNoBrowserTarget)' == 'true') and '$(IsTestProject)' != 'true'">
78+
<ItemGroup Condition="('$(TargetPlatformIdentifier)' == 'browser' or '$(CrossPlatformAndHasNoBrowserTarget)' == 'true') and '$(IsTestProject)' != 'true'">
7979
<SupportedPlatform Include="browser"/>
8080
</ItemGroup>
8181

8282
<!-- Add target platforms into MSBuild SupportedPlatform list -->
8383
<ItemGroup Condition="'$(IsTestProject)' != 'true'">
8484
<SupportedPlatform Condition="'$(TargetPlatformIdentifier)' == 'illumos'" Include="illumos" />
85-
<SupportedPlatform Condition="'$(TargetPlatformIdentifier)' == 'Solaris'" Include="Solaris" />
86-
<SupportedPlatform Condition="'$(TargetPlatformIdentifier)' == 'tvOS'" Include="tvOS" />
85+
<SupportedPlatform Condition="'$(TargetPlatformIdentifier)' == 'solaris'" Include="Solaris" />
86+
<SupportedPlatform Condition="'$(TargetPlatformIdentifier)' == 'tvos'" Include="tvOS" />
8787
<SupportedPlatform Condition="'$(TargetPlatformIdentifier)' != '' and
88-
'$(TargetPlatformIdentifier)' != 'Browser' and
88+
'$(TargetPlatformIdentifier)' != 'browser' and
8989
'$(TargetPlatformIdentifier)' != 'wasi' and
9090
'$(TargetPlatformIdentifier)' != 'windows'" Include="Unix" />
9191
</ItemGroup>

src/libraries/Common/tests/Common.Tests.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<PropertyGroup>
33
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
44
<IncludeRemoteExecutor>true</IncludeRemoteExecutor>
5-
<TargetFrameworks>$(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX</TargetFrameworks>
5+
<TargetFrameworks>$(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-linux;$(NetCoreAppCurrent)-browser;$(NetCoreAppCurrent)-osx</TargetFrameworks>
66
<EnableLibraryImportGenerator>true</EnableLibraryImportGenerator>
77
</PropertyGroup>
88
<ItemGroup>
@@ -139,12 +139,12 @@
139139
Link="System\PasteArguments.Unix.cs" />
140140
</ItemGroup>
141141
<!-- Linux specific files -->
142-
<ItemGroup Condition="'$(TargetPlatformIdentifier)' == 'Linux' or '$(TargetPlatformIdentifier)' == 'Browser'">
142+
<ItemGroup Condition="'$(TargetPlatformIdentifier)' == 'linux' or '$(TargetPlatformIdentifier)' == 'browser'">
143143
<Compile Include="$(CommonPath)Interop\Linux\Interop.Libraries.cs"
144144
Link="Common\Interop\Linux\Interop.Libraries.cs" />
145145
</ItemGroup>
146146
<!-- OSX specific files -->
147-
<ItemGroup Condition=" '$(TargetPlatformIdentifier)' == 'OSX' ">
147+
<ItemGroup Condition="'$(TargetPlatformIdentifier)' == 'osx'">
148148
<Compile Include="$(CommonPath)Interop\OSX\Interop.Libraries.cs"
149149
Link="Common\Interop\OSX\Interop.Libraries.cs" />
150150
</ItemGroup>

src/libraries/Directory.Build.props

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
<PropertyGroup>
1010
<BeforeTargetFrameworkInferenceTargets>$(RepositoryEngineeringDir)BeforeTargetFrameworkInference.targets</BeforeTargetFrameworkInferenceTargets>
11-
<RuntimeGraph>$(LibrariesProjectRoot)OSGroups.json</RuntimeGraph>
1211
<ShouldUnsetParentConfigurationAndPlatform>false</ShouldUnsetParentConfigurationAndPlatform>
1312
<GeneratePlatformNotSupportedAssemblyHeaderFile>$(RepositoryEngineeringDir)LicenseHeader.txt</GeneratePlatformNotSupportedAssemblyHeaderFile>
1413
</PropertyGroup>

0 commit comments

Comments
 (0)