c# - 如何使用 CMake 构建 C# DLL?

标签 c# cmake

这是我一生中第一次使用 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/

相关文章:

c# - System.Drawing.dll 中出现“System.ArgumentException”

c# - 如何禁用从excel复制图片

c++ - 在我的项目中使用预编译头文件(clang/llvm,但也包括 gcc)。如何在 make 中部署 -include 选项?

c++ - cmake target_compile_definitions 和 target_link_libraries 冲突,可能与 Qt 行有关?

c++ - cmake 添加外部库

c# - Directory.CreateDirectory 并不总是创建文件夹

c# - Fiddler 未从我的 C# 应用程序捕获流量

c# - 使用 ManagedInstallerClass 安装 C# 服务

cmake - 在 CMake 中从变量中剥离路径

相互依赖的CMake库