From 70eafccaeb0d553bae6f539ceac595a51cf65237 Mon Sep 17 00:00:00 2001 From: Jeff Kluge Date: Thu, 25 Nov 2021 12:12:51 -0800 Subject: [PATCH] Log an error if imported in Directory.Build.props Since the MSBuild Update gesture is used, Microsoft.Build.CentralPackageVersions must be included in Directory.Build.targets not Directory.Build.props. This change logs an error so that users will know when they've made this mistake. Fixes #179 --- .../CentralPackageVersionsTests.cs | 31 +++++++++++++++++++ src/CentralPackageVersions/Sdk/Sdk.props | 2 -- src/CentralPackageVersions/Sdk/Sdk.targets | 12 ++++++- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/CentralPackageVersions.UnitTests/CentralPackageVersionsTests.cs b/src/CentralPackageVersions.UnitTests/CentralPackageVersionsTests.cs index e18798b7..885d4900 100644 --- a/src/CentralPackageVersions.UnitTests/CentralPackageVersionsTests.cs +++ b/src/CentralPackageVersions.UnitTests/CentralPackageVersionsTests.cs @@ -236,6 +236,37 @@ public void IsDisabledForProjectsWithPackagesConfigOrDoNotSupportPackageReferenc enableCentralPackageVersions.ShouldBe("false"); } + [Fact] + public void LogErrorIfImportedInDirectoryBuildProps() + { + ProjectCreator.Create() + .Import(Path.Combine(ThisAssemblyDirectory, @"Sdk\Sdk.props")) + .Import(Path.Combine(ThisAssemblyDirectory, @"Sdk\Sdk.targets")) + .Save(GetTempFile("Directory.Build.props")); + + ProjectCreator.Create() + .Save(GetTempFile("Directory.Build.targets")); + + ProjectCreator.Templates + .PackagesProps( + path: GetTempFile("Packages.props"), + packageReferences: new Dictionary + { + ["Foo"] = "1.2.3", + }) + .Save(); + + ProjectCreator.Templates + .SdkCsproj(projectCreator: creator => creator + .ItemPackageReference("Foo")) + .Save(GetTempFile("Test.csproj")) + .TryBuild("CheckPackageReferences", out bool result, out BuildOutput buildOutput); + + result.ShouldBeFalse(buildOutput.GetConsoleLog()); + + buildOutput.Errors.ShouldBe(new[] { "Microsoft.Build.CentralPackageVersions was not imported in Directory.Build.targets. See https://github.com/microsoft/MSBuildSdks/tree/main/src/CentralPackageVersions for more information on how to include this SDK." }, buildOutput.GetConsoleLog()); + } + [Theory] [InlineData(".csproj")] [InlineData(".fsproj")] diff --git a/src/CentralPackageVersions/Sdk/Sdk.props b/src/CentralPackageVersions/Sdk/Sdk.props index d3e4c500..33c584a1 100644 --- a/src/CentralPackageVersions/Sdk/Sdk.props +++ b/src/CentralPackageVersions/Sdk/Sdk.props @@ -12,7 +12,5 @@ true - - \ No newline at end of file diff --git a/src/CentralPackageVersions/Sdk/Sdk.targets b/src/CentralPackageVersions/Sdk/Sdk.targets index c493a74e..7b5e3133 100644 --- a/src/CentralPackageVersions/Sdk/Sdk.targets +++ b/src/CentralPackageVersions/Sdk/Sdk.targets @@ -13,6 +13,10 @@ Condition=" '$(EnableCentralPackageVersions)' != 'false' And '$(CustomBeforeCentralPackageVersionsTargets)' != '' And Exists('$(CustomBeforeCentralPackageVersionsTargets)') " /> + + <_WasMicrosoftCentralPackageVersionsSdkImportedInDirectoryBuildTargets Condition="'$(_WasMicrosoftCentralPackageVersionsSdkImportedInDirectoryBuildTargets)' == '' And '$(DirectoryBuildTargetsPath)' == ''">false @@ -151,7 +155,13 @@ <_DuplicateGlobalPackageReference Include="@(_OriginalPackageReference)" Condition=" '@(GlobalPackageReference)' == '@(_OriginalPackageReference)' and '%(Identity)' != '' " /> - + + +