-
Notifications
You must be signed in to change notification settings - Fork 4.9k
/
Copy pathApiCompat.proj
142 lines (124 loc) · 9.74 KB
/
ApiCompat.proj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<Project Sdk="Microsoft.Build.NoTargets">
<PropertyGroup>
<TargetFramework>$(NetCoreAppCurrent)-$(TargetOS)</TargetFramework>
<!-- Reference the dependencies to have the assemblies available for API comparison. -->
<NoTargetsDoNotReferenceOutputAssemblies>false</NoTargetsDoNotReferenceOutputAssemblies>
<!-- Target reference assemblies instead of implementation assemblies. -->
<CompileUsingReferenceAssemblies>true</CompileUsingReferenceAssemblies>
<ApiCompatNetCoreAppLatestStableBaselineFile>$(MSBuildThisFileDirectory)ApiCompatBaseline.NetCoreAppLatestStable.xml</ApiCompatNetCoreAppLatestStableBaselineFile>
<ApiCompatNetStandard21BaselineFile>$(MSBuildThisFileDirectory)ApiCompatBaseline.netstandard2.1.xml</ApiCompatNetStandard21BaselineFile>
<ApiCompatNetStandard20BaselineFile>$(MSBuildThisFileDirectory)ApiCompatBaseline.netstandard2.0.xml</ApiCompatNetStandard20BaselineFile>
</PropertyGroup>
<!-- In servicing, the live targeting pack is compared against the GA version in strict mode. -->
<PropertyGroup Condition="'$(DotNetFinalVersionKind)' == 'servicing'">
<ApiCompatEnableStrictMode>true</ApiCompatEnableStrictMode>
</PropertyGroup>
<ItemGroup>
<ApiCompatExcludeAttributesFile Include="$(RepositoryEngineeringDir)DefaultGenApiDocIds.txt" />
<ApiCompatExcludeAttributesFile Include="$(RepositoryEngineeringDir)ApiCompatExcludeAttributes.txt" />
<ApiCompatExcludeAttributesFile Include="ApiCompatBaselineExcludedAttributes.txt" />
</ItemGroup>
<ItemGroup>
<ApiCompatNetCoreAppLatestStableLeftAssembliesTransformationPattern Include=".+%5C$([System.IO.Path]::DirectorySeparatorChar)(.+)" ReplacementString="$(ApiCompatNetCoreAppBaselineTFM)/$1" />
<ApiCompatNetStandard21LeftAssembliesTransformationPattern Include=".+%5C$([System.IO.Path]::DirectorySeparatorChar)(.+)" ReplacementString="netstandard2.1/$1" />
<ApiCompatNetStandard20LeftAssembliesTransformationPattern Include=".+%5C$([System.IO.Path]::DirectorySeparatorChar)(.+)" ReplacementString="netstandard2.0/$1" />
<ApiCompatNetCoreAppCurrentRightAssembliesTransformationPattern Include=".+%5C$([System.IO.Path]::DirectorySeparatorChar)(.+)" ReplacementString="$(NetCoreAppCurrent)/$1" />
</ItemGroup>
<!-- For API comparison, ApiCompat needs the inbox assemblies (including shims) and to resolve type forwards, the out-of-band assemblies. -->
<ItemGroup>
<ProjectReference Include="..\sfx-src.proj" OutputItemType="SharedFrameworkAssembly" />
<ProjectReference Include="..\oob-src.proj" OutputItemType="OOBAssembly" />
</ItemGroup>
<ItemGroup>
<PackageDownload Include="Microsoft.NETCore.App.Ref" Version="[$(ApiCompatNetCoreAppBaselineVersion)]" />
<PackageDownload Include="NETStandard.Library.Ref" Version="[$(NETStandardLibraryRefVersion)]" />
<PackageDownload Include="NETStandard.Library" Version="[$(NetStandardLibraryVersion)]" />
<PackageReference Include="Microsoft.DotNet.ApiCompat.Task" Version="$(MicrosoftDotNetApiCompatTaskVersion)" IsImplicitlyDefined="true" />
<!-- Restore and reference assemblies not built in runtime anymore, required for resolving type forward on both comparison sides. -->
<ApiCompatTypeForwardDestinationPackage Include="System.Data.SqlClient" PackageVersion="$(SystemDataSqlClientVersion)" TargetFramework="net8.0" />
<ApiCompatTypeForwardDestinationPackage Include="System.Drawing.Common" PackageVersion="$(SystemDrawingCommonVersion)" TargetFramework="net8.0" />
<!-- Restore and reference assemblies required for resolving type forwards on the baseline (left) side. -->
<ApiCompatLeftTypeForwardDestinationPackage Include="@(ApiCompatTypeForwardDestinationPackage)" />
<ApiCompatLeftTypeForwardDestinationPackage
Include="
Microsoft.Win32.SystemEvents;
System.CodeDom;
System.Configuration.ConfigurationManager;
System.Data.Odbc;
System.Data.OleDb;
System.Diagnostics.EventLog;
System.Diagnostics.PerformanceCounter;
System.IO.Packaging;
System.IO.Ports;
System.Runtime.Serialization.Schema;
System.Security.Cryptography.Pkcs;
System.Security.Cryptography.ProtectedData;
System.Security.Cryptography.Xml;
System.Security.Permissions;
System.ServiceModel.Syndication;
System.ServiceProcess.ServiceController;
System.Threading.AccessControl;
System.Windows.Extensions"
PackageVersion="$(ApiCompatNetCoreAppBaselineVersion)"
TargetFramework="$(ApiCompatNetCoreAppBaselineTFM)" />
<PackageDownload Include="@(ApiCompatLeftTypeForwardDestinationPackage)" Version="[%(PackageVersion)]" />
</ItemGroup>
<Target Name="RunApiCompat"
DependsOnTargets="FindReferenceAssembliesForReferences;CollectApiCompatInputs"
AfterTargets="Build"
Inputs="$(MSBuildThisFileFullPath);@(ReferencePathWithRefAssemblies);$(ApiCompatNetStandard20BaselineFile);$(ApiCompatNetStandard21BaselineFile);$(ApiCompatNetCoreAppLatestStableBaselineFile);@(ApiCompatExcludeAttributesFile)"
Outputs="$(IntermediateOutputPath)$(TargetArchitecture)-marker.txt">
<Message Text="ApiCompat -> Comparing $(NetCoreAppCurrent) reference assemblies against .NETStandard 2.x and .NETCoreApp $(ApiCompatNetCoreAppBaselineVersion)..." Importance="high" />
<ItemGroup>
<ApiCompatNetCoreAppLatestStableAssemblyReference Include="@(ApiCompatLeftTypeForwardDestinationPackage->'$(NuGetPackageRoot)$([System.String]::new('%(ApiCompatLeftTypeForwardDestinationPackage.Identity)').ToLowerInvariant())\%(ApiCompatLeftTypeForwardDestinationPackage.PackageVersion)\lib\%(ApiCompatLeftTypeForwardDestinationPackage.TargetFramework)\%(ApiCompatLeftTypeForwardDestinationPackage.Identity).dll')" />
<ApiCompatRightAssembly Include="@(ReferencePathWithRefAssemblies->WithMetadataValue('IsPrivateAssembly', 'false')->WithMetadataValue('OutputItemType', 'SharedFrameworkAssembly'))" />
<ApiCompatRightAssemblyReferenceFromPackage Include="@(ApiCompatTypeForwardDestinationPackage->'$(NuGetPackageRoot)$([System.String]::new('%(ApiCompatTypeForwardDestinationPackage.Identity)').ToLowerInvariant())\%(ApiCompatTypeForwardDestinationPackage.PackageVersion)\lib\%(ApiCompatTypeForwardDestinationPackage.TargetFramework)\%(ApiCompatTypeForwardDestinationPackage.Identity).dll')" />
<ApiCompatRightAssemblyReference Include="@(ReferencePathWithRefAssemblies->WithMetadataValue('IsPrivateAssembly', 'false')->WithMetadataValue('OutputItemType', 'OOBAssembly'));
@(ApiCompatRightAssemblyReferenceFromPackage)" />
</ItemGroup>
<!-- ApiCompat: NetCoreAppCurrent <-> .NETCoreApp ApiCompatNetCoreAppBaselineVersion -->
<Microsoft.DotNet.ApiCompat.Task.ValidateAssembliesTask
LeftAssemblies="$([MSBuild]::NormalizeDirectory('$(NuGetPackageRoot)', 'microsoft.netcore.app.ref', '$(ApiCompatNetCoreAppBaselineVersion)', 'ref', '$(ApiCompatNetCoreAppBaselineTFM)'))"
RightAssemblies="@(ApiCompatRightAssembly)"
RoslynAssembliesPath="$(RoslynAssembliesPath)"
GenerateSuppressionFile="$(ApiCompatGenerateSuppressionFile)"
SuppressionFiles="$(ApiCompatNetCoreAppLatestStableBaselineFile)"
EnableStrictMode="$(ApiCompatEnableStrictMode)"
EnableRuleAttributesMustMatch="true"
ExcludeAttributesFiles="@(ApiCompatExcludeAttributesFile)"
LeftAssembliesTransformationPattern="@(ApiCompatNetCoreAppLatestStableLeftAssembliesTransformationPattern)"
RightAssembliesTransformationPattern="@(ApiCompatNetCoreAppCurrentRightAssembliesTransformationPattern)"
LeftAssembliesReferences="@(ApiCompatNetCoreAppLatestStableAssemblyReference, ',')"
RightAssembliesReferences="@(ApiCompatRightAssemblyReference, ',')" />
<!-- ApiCompat: NetCoreAppCurrent <-> netstandard2.1 -->
<Microsoft.DotNet.ApiCompat.Task.ValidateAssembliesTask
LeftAssemblies="$(NETStandard21RefPath)netstandard.dll"
RightAssemblies="@(ApiCompatRightAssembly)"
RoslynAssembliesPath="$(RoslynAssembliesPath)"
GenerateSuppressionFile="$(ApiCompatGenerateSuppressionFile)"
SuppressionFiles="$(ApiCompatNetStandard21BaselineFile)"
EnableRuleAttributesMustMatch="true"
ExcludeAttributesFiles="@(ApiCompatExcludeAttributesFile)"
LeftAssembliesTransformationPattern="@(ApiCompatNetStandard21LeftAssembliesTransformationPattern)"
RightAssembliesTransformationPattern="@(ApiCompatNetCoreAppCurrentRightAssembliesTransformationPattern)"
RightAssembliesReferences="@(ApiCompatRightAssemblyReference, ',')" />
<!-- ApiCompat: NetCoreAppCurrent <-> netstandard2.0 -->
<Microsoft.DotNet.ApiCompat.Task.ValidateAssembliesTask
LeftAssemblies="$([MSBuild]::NormalizeDirectory('$(NuGetPackageRoot)', 'netstandard.library', '$(NetStandardLibraryVersion)', 'build', 'netstandard2.0', 'ref'))"
RightAssemblies="@(ApiCompatRightAssembly)"
RoslynAssembliesPath="$(RoslynAssembliesPath)"
GenerateSuppressionFile="$(ApiCompatGenerateSuppressionFile)"
SuppressionFiles="$(ApiCompatNetStandard20BaselineFile)"
EnableRuleAttributesMustMatch="true"
ExcludeAttributesFiles="@(ApiCompatExcludeAttributesFile)"
LeftAssembliesTransformationPattern="@(ApiCompatNetStandard20LeftAssembliesTransformationPattern)"
RightAssembliesTransformationPattern="@(ApiCompatNetCoreAppCurrentRightAssembliesTransformationPattern)"
RightAssembliesReferences="@(ApiCompatRightAssemblyReference, ',')" />
<!-- Create a marker file which serves as the target's output to enable incremental builds. -->
<Touch Files="$(IntermediateOutputPath)$(TargetArchitecture)-marker.txt"
AlwaysCreate="true" />
</Target>
<Target Name="CleanAdditionalFiles" AfterTargets="Clean">
<RemoveDir Directories="$(IntermediateOutputPath)" />
</Target>
</Project>