|
1 | 1 | <Project Sdk="Microsoft.Build.NoTargets">
|
2 | 2 |
|
| 3 | + <!-- Run API compat against the following 1:1 assemblies but don't include them in the list that is used to generate facades --> |
3 | 4 | <ItemGroup>
|
4 |
| - <!-- Run API compat against the following 1:1 assemblies but don't include them in the list that is used to generate facades --> |
5 | 5 | <NetFxReference Include="System.DirectoryServices" />
|
6 | 6 | <NetFxReference Include="System.DirectoryServices.AccountManagement" />
|
7 | 7 | <NetFxReference Include="System.DirectoryServices.Protocols" />
|
|
14 | 14 | <PackageReference Include="Microsoft.DotNet.ApiCompat" Version="$(MicrosoftDotNetApiCompatVersion)" IsImplicitlyDefined="true" />
|
15 | 15 | </ItemGroup>
|
16 | 16 |
|
17 |
| - <!-- Evaluate these properties inside a Target to gain access to IntermediateOutputPath. --> |
18 |
| - <Target Name="SetApiCompatFiles"> |
| 17 | + <Target Name="GetApiCompatInputsAndOutputs"> |
19 | 18 | <PropertyGroup>
|
20 |
| - <ApiCompatResponseFile>$(IntermediateOutputPath)apicompat.rsp</ApiCompatResponseFile> |
21 | 19 | <ApiCompatBaselineFile>$(MSBuildThisFileDirectory)ApiCompatBaseline.netcoreapp.netfx461.txt</ApiCompatBaselineFile>
|
22 | 20 | <ApiCompatBaselineIgnoreFile>$(MSBuildThisFileDirectory)ApiCompatBaseline.netcoreapp.netfx461.ignore.txt</ApiCompatBaselineIgnoreFile>
|
23 | 21 | <ApiCompatNSBaselineFile>$(MSBuildThisFileDirectory)ApiCompatBaseline.netcoreapp.netstandard.txt</ApiCompatNSBaselineFile>
|
24 | 22 | <ApiCompatNSOnlyBaselineFile>$(MSBuildThisFileDirectory)ApiCompatBaseline.netcoreapp.netstandardOnly.txt</ApiCompatNSOnlyBaselineFile>
|
| 23 | + <PreviousNetCoreAppBaselineFile>$(MSBuildThisFileDirectory)ApiCompatBaseline.PreviousNetCoreApp.txt</PreviousNetCoreAppBaselineFile> |
| 24 | + <ApiCompatMarkerFile>$(BaseIntermediateOutputPath)marker.txt</ApiCompatMarkerFile> |
25 | 25 | </PropertyGroup>
|
| 26 | + |
| 27 | + <ItemGroup> |
| 28 | + <NetCoreAppCurrentRefFile Include="$(NetCoreAppCurrentRefPath)*.dll" /> |
| 29 | + </ItemGroup> |
26 | 30 | </Target>
|
27 | 31 |
|
28 |
| - <!-- Run ApiCompat --> |
29 | 32 | <Target Name="RunApiCompat"
|
30 |
| - DependsOnTargets="SetApiCompatFiles" |
| 33 | + DependsOnTargets="GetApiCompatInputsAndOutputs" |
31 | 34 | AfterTargets="Build"
|
32 |
| - Inputs="$(ApiCompatResponseFile)" |
33 |
| - Outputs="$(ApiCompatBaselineFile);$(ApiCompatNSBaselineFile)"> |
| 35 | + Inputs="@(NetCoreAppCurrentRefFile);$(ApiCompatBaselineFile);$(ApiCompatBaselineIgnoreFile);$(ApiCompatNSBaselineFile);$(ApiCompatNSOnlyBaselineFile);$(PreviousNetCoreAppBaselineFile)" |
| 36 | + Outputs="$(ApiCompatMarkerFile)"> |
34 | 37 |
|
35 | 38 | <PropertyGroup>
|
36 |
| - <ApiCompatImplementationDirs>$(NetCoreAppCurrentRefPath.TrimEnd('\/'))</ApiCompatImplementationDirs> |
37 |
| - <ApiCompatArgs Condition="'$(ApiCompatExcludeAttributeList)' != ''">$(ApiCompatArgs) --exclude-attributes "$(ApiCompatExcludeAttributeList)"</ApiCompatArgs> |
38 |
| - <ApiCompatArgs>$(ApiCompatArgs) --impl-dirs "$(ApiCompatImplementationDirs)"</ApiCompatArgs> |
39 |
| - <BaselineApiCompatArgs Condition="Exists($(ApiCompatBaselineIgnoreFile))">--baseline "$(ApiCompatBaselineIgnoreFile)"</BaselineApiCompatArgs> |
| 39 | + <ApiCompatResponseFile>$(BaseIntermediateOutputPath)apicompat.rsp</ApiCompatResponseFile> |
40 | 40 | <ApiCompatExitCode>0</ApiCompatExitCode>
|
| 41 | + <ApiCompatArgs>--impl-dirs "$(NetCoreAppCurrentRefPath.TrimEnd('\/'))"</ApiCompatArgs> |
| 42 | + <ApiCompatArgs Condition="'$(ApiCompatExcludeAttributeList)' != ''">$(ApiCompatArgs) --exclude-attributes "$(ApiCompatExcludeAttributeList)"</ApiCompatArgs> |
41 | 43 | </PropertyGroup>
|
42 | 44 |
|
43 |
| - <MakeDir Directories="$(IntermediateOutputPath)" /> |
44 |
| - <WriteLinesToFile File="$(ApiCompatResponseFile)" Lines="$(ApiCompatArgs)" Overwrite="true" /> |
| 45 | + <WriteLinesToFile File="$(ApiCompatResponseFile)" |
| 46 | + Lines="$(ApiCompatArgs)" |
| 47 | + Overwrite="true" /> |
45 | 48 |
|
46 |
| - <Exec Command="$(_ApiCompatCommand) "@(NetFxReference -> '$(NetFxRefPath)%(Identity).dll')" $(BaselineApiCompatArgs) @"$(ApiCompatResponseFile)" > $(ApiCompatBaselineFile)" |
| 49 | + <Exec Command="$(_ApiCompatCommand) "@(NetFxReference -> '$(NetFxRefPath)%(Identity).dll')" --baseline "$(ApiCompatBaselineIgnoreFile)" @"$(ApiCompatResponseFile)" > $(ApiCompatBaselineFile)" |
47 | 50 | Condition="'$(BaselineApiCompat)' == 'true'"
|
48 | 51 | CustomErrorRegularExpression="^[a-zA-Z]+ :"
|
49 | 52 | StandardOutputImportance="Low"
|
50 | 53 | IgnoreExitCode="true">
|
51 | 54 | <Output TaskParameter="ExitCode" PropertyName="ApiCompatExitCode" />
|
52 | 55 | </Exec>
|
53 |
| - |
54 | 56 | <Error Condition="'$(ApiCompatExitCode)' != '0'" Text="ApiCompat failed comparing $(NETFrameworkReferenceAssemblyTFM) to $(NetCoreAppCurrent)" />
|
55 | 57 |
|
56 |
| - |
57 |
| - <!-- |
58 |
| - In order to update the .NET Standard baseline, you can just start the build with /p:UpdateNETStandardBaseline=True |
59 |
| - --> |
| 58 | + <!-- In order to update the .NETStandard baseline, you can just start the build with /p:UpdateNETStandardBaseline=true --> |
60 | 59 | <PropertyGroup>
|
61 |
| - <UpdateNETStandardBaseline Condition="'$(UpdateNETStandardBaseline)' == ''">False</UpdateNETStandardBaseline> |
62 |
| - <_netStandardLibrary20RefPath>$([MSBuild]::NormalizeDirectory('$(NuGetPackageRoot)', 'netstandard.library', '$(NetStandardLibraryVersion)', 'build', 'netstandard2.0', 'ref'))</_netStandardLibrary20RefPath> |
63 |
| - <_netStandard21OnlyRef>$(NETStandard21RefPath)netstandard.dll</_netStandard21OnlyRef> |
64 |
| - <_netStandard21BaselineModifer>--baseline</_netStandard21BaselineModifer> |
65 |
| - <_netStandard21BaselineModifer Condition="$(UpdateNETStandardBaseline)">></_netStandard21BaselineModifer> |
| 60 | + <NetStandardLibrary20RefPath>$([MSBuild]::NormalizeDirectory('$(NuGetPackageRoot)', 'netstandard.library', '$(NetStandardLibraryVersion)', 'build', 'netstandard2.0', 'ref'))</NetStandardLibrary20RefPath> |
| 61 | + <NetStandard21OnlyRef>$(NETStandard21RefPath)netstandard.dll</NetStandard21OnlyRef> |
| 62 | + <NetStandard21BaselineModifer>--baseline</NetStandard21BaselineModifer> |
| 63 | + <NetStandard21BaselineModifer Condition="'$(UpdateNETStandardBaseline)' == 'true'">></NetStandard21BaselineModifer> |
66 | 64 | </PropertyGroup>
|
67 | 65 |
|
68 |
| - <Exec Command="$(_ApiCompatCommand) "$(_netStandard21OnlyRef)" @"$(ApiCompatResponseFile)" $(_netStandard21BaselineModifer) "$(ApiCompatNSOnlyBaselineFile)"" |
| 66 | + <Exec Command="$(_ApiCompatCommand) "$(NetStandard21OnlyRef)" @"$(ApiCompatResponseFile)" $(NetStandard21BaselineModifer) "$(ApiCompatNSOnlyBaselineFile)"" |
69 | 67 | CustomErrorRegularExpression="^[a-zA-Z]+ :"
|
70 | 68 | StandardOutputImportance="Low"
|
71 | 69 | IgnoreExitCode="true">
|
72 | 70 | <Output TaskParameter="ExitCode" PropertyName="ApiCompatExitCode" />
|
73 | 71 | </Exec>
|
74 |
| - |
75 | 72 | <Error Condition="'$(ApiCompatExitCode)' != '0'" Text="ApiCompat failed comparing netstandard.dll to $(NetCoreAppCurrent)" />
|
76 | 73 |
|
77 |
| - <Exec Command="$(_ApiCompatCommand) "$(_netStandardLibrary20RefPath.TrimEnd('\/'))" --baseline "$(ApiCompatNSBaselineFile)" @"$(ApiCompatResponseFile)"" |
| 74 | + <Exec Command="$(_ApiCompatCommand) "$(NetStandardLibrary20RefPath.TrimEnd('\/'))" --baseline "$(ApiCompatNSBaselineFile)" @"$(ApiCompatResponseFile)"" |
78 | 75 | CustomErrorRegularExpression="^[a-zA-Z]+ :"
|
79 | 76 | StandardOutputImportance="Low"
|
80 | 77 | IgnoreExitCode="true">
|
81 | 78 | <Output TaskParameter="ExitCode" PropertyName="ApiCompatExitCode" />
|
82 | 79 | </Exec>
|
83 |
| - |
84 | 80 | <Error Condition="'$(ApiCompatExitCode)' != '0'" Text="ApiCompat failed comparing netstandard to $(NetCoreAppCurrent)" />
|
85 | 81 |
|
| 82 | + <!-- In order to update the previous .NETCoreApp baseline, you can just start the build with /p:UpdatePreviousNetCoreAppBaseline=true --> |
86 | 83 | <PropertyGroup>
|
87 | 84 | <PreviousNetCoreAppRefPath>$([MSBuild]::NormalizeDirectory('$(NuGetPackageRoot)', 'microsoft.netcore.app.ref', '$(NetCoreAppLatestStablePackageBaselineVersion)', 'ref', '$(NetCoreAppLatestStable)'))</PreviousNetCoreAppRefPath>
|
88 |
| - <_previousNetCoreAppBaselineFile>$(MSBuildThisFileDirectory)ApiCompatBaseline.PreviousNetCoreApp.txt</_previousNetCoreAppBaselineFile> |
89 |
| - <_previousNetCoreAppBaselineParam>--baseline "$(_previousNetCoreAppBaselineFile)"</_previousNetCoreAppBaselineParam> |
90 |
| - <_previousNetCoreAppBaselineParam Condition="'$(UpdatePreviousNetCoreAppBaseline)' == 'true'">> "$(_previousNetCoreAppBaselineFile)"</_previousNetCoreAppBaselineParam> |
| 85 | + <PreviousNetCoreAppBaselineParam>--baseline</PreviousNetCoreAppBaselineParam> |
| 86 | + <PreviousNetCoreAppBaselineParam Condition="'$(UpdatePreviousNetCoreAppBaseline)' == 'true'">></PreviousNetCoreAppBaselineParam> |
91 | 87 | </PropertyGroup>
|
92 | 88 |
|
93 |
| - <Error Condition="!Exists($(PreviousNetCoreAppRefPath))" Text="Missing reference assemblies for '$(NetCoreAppLatestStable)'" /> |
94 |
| - <Exec Command="$(_ApiCompatCommand) "$(PreviousNetCoreAppRefPath.TrimEnd('\/'))" @"$(ApiCompatResponseFile)" $(_previousNetCoreAppBaselineParam)" |
| 89 | + <Exec Command="$(_ApiCompatCommand) "$(PreviousNetCoreAppRefPath.TrimEnd('\/'))" @"$(ApiCompatResponseFile)" $(PreviousNetCoreAppBaselineParam) "$(PreviousNetCoreAppBaselineFile)"" |
95 | 90 | CustomErrorRegularExpression="^[a-zA-Z]+ :"
|
96 | 91 | StandardOutputImportance="Low"
|
97 | 92 | IgnoreExitCode="true">
|
98 | 93 | <Output TaskParameter="ExitCode" PropertyName="ApiCompatExitCode" />
|
99 | 94 | </Exec>
|
100 |
| - |
101 | 95 | <Error Condition="'$(ApiCompatExitCode)' != '0'" Text="ApiCompat failed comparing $(NetCoreAppLatestStable) to $(NetCoreAppCurrent). If this breaking change is intentional, the ApiCompat baseline can be updated by running 'dotnet build $(MSBuildThisFileFullPath) /p:UpdatePreviousNetCoreAppBaseline=true'" />
|
102 |
| - </Target> |
103 | 96 |
|
104 |
| - <Target Name="CleanAdditionalFiles" AfterTargets="Clean"> |
105 |
| - <RemoveDir Directories="$(BaseIntermediateOutputPath)" /> |
| 97 | + <!-- Create a marker file which serves as the target's output to enable incremental builds. --> |
| 98 | + <Touch Files="$(ApiCompatMarkerFile)" |
| 99 | + AlwaysCreate="true" /> |
| 100 | + |
106 | 101 | </Target>
|
107 | 102 |
|
108 | 103 | </Project>
|
0 commit comments