From f200f4d5a774ef83a938f0d99f80c2c8c83276b1 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 15 Sep 2021 10:53:45 -0400 Subject: VS: Fix managed C++ project generation for VS 2022 VS 2022 expects managed `.vcxproj` files to have a `ManagedAssembly` element. Fixes: #22583 --- Source/cmVisualStudio10TargetGenerator.cxx | 4 ++++ Tests/VSWindowsFormsResx/CMakeLists.txt | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index bda2f91..97cb1bf 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -581,6 +581,10 @@ void cmVisualStudio10TargetGenerator::Generate() } if (this->Managed) { + if (this->LocalGenerator->GetVersion() >= + cmGlobalVisualStudioGenerator::VS17) { + e1.Element("ManagedAssembly", "true"); + } std::string outputType; switch (this->GeneratorTarget->GetType()) { case cmStateEnums::OBJECT_LIBRARY: diff --git a/Tests/VSWindowsFormsResx/CMakeLists.txt b/Tests/VSWindowsFormsResx/CMakeLists.txt index 43c4833..b9b2163 100644 --- a/Tests/VSWindowsFormsResx/CMakeLists.txt +++ b/Tests/VSWindowsFormsResx/CMakeLists.txt @@ -33,6 +33,12 @@ set(TARGET_RESX set(TARGET_LIBRARIES ${SYSLIBS}) add_executable(${PROJECT_NAME} ${TARGET_SRC} ${TARGET_H} ${TARGET_RESX}) +if(NOT CMAKE_GENERATOR MATCHES "Visual Studio 1[0-6]") + # VS 17 2022 and above require a global mark on managed assemblies. + # CMake adds this automatically when using COMMON_LANGUAGE_RUNTIME, + # but this test covers direct use of /clr. + set_property(TARGET ${PROJECT_NAME} PROPERTY VS_GLOBAL_ManagedAssembly "true") +endif() # Note: The property VS_GLOBAL_KEYWORD must be set. set_property(TARGET ${PROJECT_NAME} PROPERTY VS_GLOBAL_KEYWORD "ManagedCProj") -- cgit v0.12