-
Notifications
You must be signed in to change notification settings - Fork 4.9k
/
Copy pathApiCompat.proj
130 lines (106 loc) · 8.05 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
<Project Sdk="Microsoft.Build.NoTargets">
<PropertyGroup>
<TargetFramework>$([MSBuild]::ValueOrDefault('$(BuildTargetFramework)', '$(NetCoreAppCurrent)'))</TargetFramework>
<!-- Set to true to build this project -->
<BaselineApiCompat Condition="'$(BaselineApiCompat)' == ''">false</BaselineApiCompat>
<PreviousNetCoreApp>net5.0</PreviousNetCoreApp>
<PreviousNetCoreAppPackageId>microsoft.netcore.app.ref</PreviousNetCoreAppPackageId>
<PreviousNetCoreAppPackageVersion>5.0.0</PreviousNetCoreAppPackageVersion>
</PropertyGroup>
<ItemGroup>
<!-- Run API compat against the following 1:1 assemblies but don't include them in the list that is used to generate facades -->
<NetFxReference Include="System.DirectoryServices" />
<NetFxReference Include="System.DirectoryServices.AccountManagement" />
<NetFxReference Include="System.DirectoryServices.Protocols" />
</ItemGroup>
<ItemGroup>
<PackageDownload Include="$(PreviousNetCoreAppPackageId)" Version="[$(PreviousNetCoreAppPackageVersion)]" />
<PackageDownload Include="NETStandard.Library.Ref" Version="[$(NETStandardLibraryRefVersion)]" />
<PackageDownload Include="NETStandard.Library" Version="[$(NetStandardLibraryVersion)]" />
</ItemGroup>
<!-- Evaluate these properties inside a Target to gain access to TargetFrameworkIdentifier. -->
<Target Name="SetApiCompatFiles">
<PropertyGroup>
<ApiCompatResponseFile>$(IntermediateOutputPath)apicompat.rsp</ApiCompatResponseFile>
<ApiCompatTarget>$(TargetFrameworkIdentifier.Substring(1).ToLower())</ApiCompatTarget>
<ApiCompatBaselineFile>$(MSBuildThisFileDirectory)ApiCompatBaseline.$(ApiCompatTarget).netfx461.txt</ApiCompatBaselineFile>
<ApiCompatBaselineIgnoreFile>$(MSBuildThisFileDirectory)ApiCompatBaseline.$(ApiCompatTarget).netfx461.ignore.txt</ApiCompatBaselineIgnoreFile>
<ApiCompatNSBaselineFile>$(MSBuildThisFileDirectory)ApiCompatBaseline.$(ApiCompatTarget).netstandard.txt</ApiCompatNSBaselineFile>
<ApiCompatNSOnlyBaselineFile>$(MSBuildThisFileDirectory)ApiCompatBaseline.$(ApiCompatTarget).netstandardOnly.txt</ApiCompatNSOnlyBaselineFile>
</PropertyGroup>
</Target>
<!-- Run ApiCompat -->
<Target Name="RunApiCompat"
DependsOnTargets="SetApiCompatFiles"
AfterTargets="Build"
Inputs="$(ApiCompatResponseFile)"
Outputs="$(ApiCompatBaselineFile);$(ApiCompatNSBaselineFile)">
<PropertyGroup>
<ApiCompatImplementationDirs>$(NetCoreAppCurrentRefPath.TrimEnd('\/'))</ApiCompatImplementationDirs>
<ApiCompatArgs Condition="'$(ApiCompatExcludeAttributeList)' != ''">$(ApiCompatArgs) --exclude-attributes "$(ApiCompatExcludeAttributeList)"</ApiCompatArgs>
<ApiCompatArgs>$(ApiCompatArgs) --impl-dirs "$(ApiCompatImplementationDirs)"</ApiCompatArgs>
<BaselineApiCompatArgs Condition="Exists($(ApiCompatBaselineIgnoreFile))">--baseline "$(ApiCompatBaselineIgnoreFile)"</BaselineApiCompatArgs>
<ApiCompatExitCode>0</ApiCompatExitCode>
</PropertyGroup>
<MakeDir Directories="$(IntermediateOutputPath)" />
<WriteLinesToFile File="$(ApiCompatResponseFile)" Lines="$(ApiCompatArgs)" Overwrite="true" />
<Exec Command="$(_ApiCompatCommand) "@(NetFxReference -> '$(NetFxRefPath)%(Identity).dll')" $(BaselineApiCompatArgs) @"$(ApiCompatResponseFile)" > $(ApiCompatBaselineFile)"
Condition="'$(TargetFramework)' == '$(NetCoreAppCurrent)' and '$(BaselineApiCompat)' == 'true'"
CustomErrorRegularExpression="^[a-zA-Z]+ :"
StandardOutputImportance="Low"
IgnoreExitCode="true">
<Output TaskParameter="ExitCode" PropertyName="ApiCompatExitCode" />
</Exec>
<Error Condition="'$(ApiCompatExitCode)' != '0'" Text="ApiCompat failed comparing $(NETFrameworkReferenceAssemblyTFM) to $(TargetFramework)" />
<!--
In order to update the .NET Standard baseline, you can just start the build with either
/p:UpdateNETStandardBaseline=True
of
/p:UpdateNETStandardBaselineLocally=True
The difference is that the former uses the official .NET Standard while the latter uses a locally built
.NET Standard (Debug, in a folder parallel to where you checked out CoreFx).
-->
<PropertyGroup>
<UpdateNETStandardBaseline Condition="'$(UpdateNETStandardBaseline)' == ''">False</UpdateNETStandardBaseline>
<UpdateNETStandardBaselineLocally Condition="'$(UpdateNETStandardBaselineLocally)' == ''">False</UpdateNETStandardBaselineLocally>
<_netStandardLibraryRefPath>$([MSBuild]::NormalizeDirectory('$(NuGetPackageRoot)', 'netstandard.library.ref', '$(NETStandardLibraryRefVersion)', 'ref', 'netstandard2.1'))</_netStandardLibraryRefPath>
<_netStandardLibrary20RefPath>$([MSBuild]::NormalizeDirectory('$(NuGetPackageRoot)', 'netstandard.library', '$(NetStandardLibraryVersion)', 'build', 'netstandard2.0', 'ref'))</_netStandardLibrary20RefPath>
<_netStandard21OnlyRef>$(_netStandardLibraryRefPath)netstandard.dll</_netStandard21OnlyRef>
<_netStandard21OnlyRef Condition="$(UpdateNETStandardBaselineLocally)">$(MSBuildThisFileDirectory)..\..\..\standard\artifacts\bin\ref\netstandard\Debug\netstandard.dll</_netStandard21OnlyRef>
<_netStandard21BaselineModifer>--baseline</_netStandard21BaselineModifer>
<_netStandard21BaselineModifer Condition="$(UpdateNETStandardBaseline) or $(UpdateNETStandardBaselineLocally)">></_netStandard21BaselineModifer>
</PropertyGroup>
<Exec Command="$(_ApiCompatCommand) "$(_netStandard21OnlyRef)" @"$(ApiCompatResponseFile)" $(_netStandard21BaselineModifer) "$(ApiCompatNSOnlyBaselineFile)""
CustomErrorRegularExpression="^[a-zA-Z]+ :"
StandardOutputImportance="Low"
IgnoreExitCode="true">
<Output TaskParameter="ExitCode" PropertyName="ApiCompatExitCode" />
</Exec>
<Error Condition="'$(ApiCompatExitCode)' != '0'" Text="ApiCompat failed comparing netstandard.dll to $(ApiCompatTarget)" />
<Exec Command="$(_ApiCompatCommand) "$(_netStandardLibrary20RefPath.TrimEnd('\/'))" --baseline "$(ApiCompatNSBaselineFile)" @"$(ApiCompatResponseFile)""
CustomErrorRegularExpression="^[a-zA-Z]+ :"
StandardOutputImportance="Low"
IgnoreExitCode="true">
<Output TaskParameter="ExitCode" PropertyName="ApiCompatExitCode" />
</Exec>
<Error Condition="'$(ApiCompatExitCode)' != '0'" Text="ApiCompat failed comparing netstandard to $(ApiCompatTarget)" />
<PropertyGroup>
<PreviousNetCoreAppRefPath>$([MSBuild]::NormalizeDirectory('$(NuGetPackageRoot)', '$(PreviousNetCoreAppPackageId)', '$(PreviousNetCoreAppPackageVersion)', 'ref', '$(PreviousNetCoreApp)'))</PreviousNetCoreAppRefPath>
<_previousNetCoreAppBaselineFile>$(MSBuildThisFileDirectory)ApiCompatBaseline.PreviousNetCoreApp.txt</_previousNetCoreAppBaselineFile>
<_previousNetCoreAppBaselineParam>--baseline "$(_previousNetCoreAppBaselineFile)"</_previousNetCoreAppBaselineParam>
<_previousNetCoreAppBaselineParam Condition="'$(UpdatePreviousNetCoreAppBaseline)' == 'true'">> "$(_previousNetCoreAppBaselineFile)"</_previousNetCoreAppBaselineParam>
</PropertyGroup>
<Error Condition="'$(NetCoreAppCurrent)' != 'net6.0'" Text="Update value of PreviousNetCoreApp" />
<Error Condition="!Exists($(PreviousNetCoreAppRefPath))" Text="Missing reference assemblies for '$(PreviousNetCoreApp)'" />
<Exec Command="$(_ApiCompatCommand) "$(PreviousNetCoreAppRefPath.TrimEnd('\/'))" @"$(ApiCompatResponseFile)" $(_previousNetCoreAppBaselineParam)"
CustomErrorRegularExpression="^[a-zA-Z]+ :"
StandardOutputImportance="Low"
IgnoreExitCode="true">
<Output TaskParameter="ExitCode" PropertyName="ApiCompatExitCode" />
</Exec>
<Error Condition="'$(ApiCompatExitCode)' != '0'" Text="ApiCompat failed comparing $(PreviousNetCoreApp) to $(ApiCompatTarget)" />
</Target>
<Target Name="CleanAdditionalFiles" AfterTargets="Clean">
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
</Target>
</Project>