这是我一生中第一次使用 CMake 来构建 C# DLL。此 CMake 适合更大的工作流程。否则,我使用 Visual Studio 2017 进行创作和调试。
到目前为止,我的 CMakeLists.txt 看起来像这样,是从我能找到的几个示例中查看、剪切和粘贴的结果。
cmake_minimum_required(VERSION 3.8)
project("galapagos" CSharp)
add_executable("galapagos"
tortoise1.cs
tortoise2.cs
tortoiseForm.cs
packages.config
runTortoiseReport.cs
... etc ...
tortoiseTest.cs)
set_property(TARGET "galapagos" PROPERTY DOTNET_TARGET_FRAMEWORK_VERSION "v4.6.1")
set_property(TARGET "galapagos" PROPERTY WIN32_EXECUTABLE FALSE)
set_property(TARGET "galapagos" PROPERTY VS_CONFIGURATION_TYPE ClassLibrary)
set_property(TARGET "galapagos" PROPERTY VS_DOTNET_REFERENCES
"Microsoft.CSharp"
"PresentationCore"
"PresentationFramework"
"System"
"System.Core"
"System.Data"
"System.Data.DataSetExtensions"
"System.Windows.Forms"
"System.Net.Http"
"System.Xaml"
"System.Xml"
"System.Xml.Linq"
"WindowsBase"
.. etc ...
"C:/galapagos/galapagos.dll"
)
此外,尝试构建会导致我的 .csprog 文件发生更改
- 表单消失并出现相应的构建错误 no 存在时间更长
- 输出类型从
类库
更改为控制台应用程序
消失的表单有时可以通过从项目中排除相应的文件然后再次添加来重新出现。
没有生成 DLL。对 .csprog 文件的更改(其中应用程序现在是控制台应用程序
)充其量是奇怪的。
显然,
set_property(TARGET "galapagos" PROPERTY VS_CONFIGURATION_TYPE BeefChowMein)
效果与
相同set_property(TARGET "galapagos" PROPERTY VS_CONFIGURATION_TYPE ClassLibrary)
这可能解释了 CMake 无法理解 ClassLibrary
并假定它是默认的 ConsoleApplication
。
由于构建过程显然已经破坏了表单定义,我现在遇到了很多错误,例如
tortoise1.cs(16,25): error CS1061: 'TortoiseForm' does not contain a definition for 'carapace' and no accessible
extension method 'carapace' accepting a first argument of type 'TortoiseForm' could be found (are you missing a using directive or an assembly reference?) [......csproj]
项目在 VS 中正确构建之前几秒。
VS 和 CMake 是否存在共存问题?
我还缺少什么?
最佳答案
请添加 ADD_LIBRARY,而不是使用 add_executable。
ADD_LIBRARY(${PROJECT_NAME} SHARED
..sources..
)
关于c# - 如何使用 CMake 构建 C# DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55039456/