From 3283ef47d1d9837bcc402a3972c97ca16f2594ca Mon Sep 17 00:00:00 2001 From: Calum Robinson Date: Wed, 11 Sep 2024 10:30:07 +0100 Subject: [PATCH] VS: Fix DOTNET_SDK builds when no VS_PACKAGE_REFERENCES set nuget restore always needs to be run for the new DOTNET_SDK style projects, even when VS_PACKAGE_REFERENCES is empty. Fixes: #23405 --- Source/cmVisualStudio10TargetGenerator.cxx | 5 +++-- Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake | 3 +-- .../VsDotnetSdk/VsDotnetSdkNugetRestore-build-stdout.txt | 1 + Tests/RunCMake/VsDotnetSdk/VsDotnetSdkNugetRestore.cmake | 8 ++++++++ 4 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 Tests/RunCMake/VsDotnetSdk/VsDotnetSdkNugetRestore-build-stdout.txt create mode 100644 Tests/RunCMake/VsDotnetSdk/VsDotnetSdkNugetRestore.cmake diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index 72c1d7e469..122a9701cb 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -5924,7 +5924,8 @@ void cmVisualStudio10TargetGenerator::UpdateCache() { std::vector packageReferences; - if (this->GeneratorTarget->HasPackageReferences()) { + if (this->GeneratorTarget->IsDotNetSdkTarget() || + this->GeneratorTarget->HasPackageReferences()) { // Store a cache entry that later determines, if a package restore is // required. this->GeneratorTarget->Makefile->AddCacheDefinition( @@ -5941,7 +5942,7 @@ void cmVisualStudio10TargetGenerator::UpdateCache() OrderedTargetDependSet depends(unordered, CMAKE_CHECK_BUILD_SYSTEM_TARGET); for (cmGeneratorTarget const* dt : depends) { - if (dt->HasPackageReferences()) { + if (dt->IsDotNetSdkTarget() || dt->HasPackageReferences()) { this->GeneratorTarget->Makefile->AddCacheDefinition( cmStrCat(this->GeneratorTarget->GetName(), "_REQUIRES_VS_PACKAGE_RESTORE"), diff --git a/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake b/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake index 0be77ae600..7de011dc56 100644 --- a/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake +++ b/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake @@ -24,9 +24,8 @@ function(runCmakeAndBuild CASE) file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}") file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}") run_cmake(${CASE}) - set(build_flags /restore) - run_cmake_command(${CASE}-build ${CMAKE_COMMAND} --build . -- ${build_flags}) run_cmake_command(${CASE}-build ${CMAKE_COMMAND} --build .) endfunction() runCmakeAndBuild(VsDotnetSdkCustomCommandsTarget) +runCmakeAndBuild(VsDotnetSdkNugetRestore) diff --git a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkNugetRestore-build-stdout.txt b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkNugetRestore-build-stdout.txt new file mode 100644 index 0000000000..b0c8da7095 --- /dev/null +++ b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkNugetRestore-build-stdout.txt @@ -0,0 +1 @@ +Determining projects to restore diff --git a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkNugetRestore.cmake b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkNugetRestore.cmake new file mode 100644 index 0000000000..5feb265778 --- /dev/null +++ b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkNugetRestore.cmake @@ -0,0 +1,8 @@ +enable_language(CSharp) +if(NOT CMAKE_CSharp_COMPILER) + return() +endif() + +set(CMAKE_DOTNET_SDK "Microsoft.NET.Sdk") + +add_executable(foo csharponly.cs lib1.cs)