gpt4 book ai didi

c# - 将 DLL 引用添加到基于 CMake 的 C# 项目

转载 作者:太空宇宙 更新时间:2023-11-03 14:52:01 65 4
gpt4 key购买 nike

我正在使用 CMake 生成一个 C# Wpf 项目。我按照以下示例 https://github.com/bemehiser/cmake_csharp_wpf_example/blob/master/Example/CMakeLists.txt

我的问题是:如何使用 CMake 添加第 3 方 .NET DLL 引用到该项目?

最佳答案

我添加这个详细的答案是因为目前在高级网页上有很多误导性的例子。 squareskittles的答案以下是正确的,但不包括对潜在陷阱的详细讨论。这就是我的回答试图给出的。

要设置 Visual Studio 管理的项目 .NET 引用(如 WindowsBase ),最好使用 cmake 目标属性 VS_DOTNET_REFERENCES .在 3.22.4 之前的 cmake 版本中,重要的是将多个引用指定为列表,而不是单独指定。较新的 cmake 似乎不再有此限制(感谢 jasal 指出了这一点),但将多个引用指定为列表可能仍然是一个不错的选择。所以使用 "PresentationCore;WindowsBase;..." 是正确的,或使用本文底部示例中的 cmake 列表。然而,单独添加多个引用是正确的,就像在网络上经常看到的那样:

# this is incorrect, and will only add the first reference, not all:
set_target_properties(${PROJECT_NAME} PROPERTIES VS_DOTNET_REFERENCES
"PresentationCore"
"WindowsBase"
...)

要添加二进制 Visual Studio 管理项目 .NET 引用,建议使用一个 cmake 目标属性 VS_DOTNET_REFERENCE_refname对于每个二进制引用。要求 <refname>替换为引用文件名,不带扩展名。指定不同的 <refname>正确的供引用:

# this is incorrect, because the refname "mythriftlib" and the
# reference file name "Thrift" of the DLL mismatch:
set_target_properties(${PROJECT_NAME} PROPERTIES VS_DOTNET_REFERENCE_mythriftlib
"${CMAKE_INSTALL_PREFIX}/bin/Thrift.dll")

最后,同样重要的是,我更喜欢使用 set_target_properties(${PROJECT_NAME} ...)在同样有效的 set_properties(TARGET ${PROJECT_NAME} ...) .无论您选择哪个,最好在您的 CMakeLists.txt 中保持一致.

这是一个正确的完整示例,可以帮助您入门:

project(WPFGui VERSION 0.1.0 LANGUAGES CSharp)

include(CSharpUtilities)

add_executable(${PROJECT_NAME}
App.config
App.xaml
App.cs
MainWindow.xaml
MainWindow.cs
Properties/AssemblyInfo.cs
Properties/Resources.Designer.cs
Properties/Resources.resx
Properties/Settings.Designer.cs
Properties/Settings.settings)

csharp_set_designer_cs_properties(
Properties/AssemblyInfo.cs
Properties/Resources.Designer.cs
Properties/Resources.resx
Properties/Settings.Designer.cs
Properties/Settings.settings)

csharp_set_xaml_cs_properties(
App.xaml
App.cs
MainWindow.xaml
MainWindow.cs)

set_source_files_properties(App.xaml PROPERTIES
VS_XAML_TYPE "ApplicationDefinition")

set_target_properties(${PROJECT_NAME} PROPERTIES
DOTNET_TARGET_FRAMEWORK_VERSION "v4.6.1")

set_target_properties(${PROJECT_NAME} PROPERTIES
WIN32_EXECUTABLE TRUE)

LIST(APPEND VS_DOTNET_REFERENCES "Microsoft.CSharp")
LIST(APPEND VS_DOTNET_REFERENCES "PresentationCore")
LIST(APPEND VS_DOTNET_REFERENCES "PresentationFramework")
LIST(APPEND VS_DOTNET_REFERENCES "System")
LIST(APPEND VS_DOTNET_REFERENCES "System.Xaml")
LIST(APPEND VS_DOTNET_REFERENCES "System.Xml")
LIST(APPEND VS_DOTNET_REFERENCES "System.Xml.Linq")
LIST(APPEND VS_DOTNET_REFERENCES "WindowsBase")

set_target_properties(${PROJECT_NAME} PROPERTIES
VS_DOTNET_REFERENCES "${VS_DOTNET_REFERENCES}"
VS_DOTNET_REFERENCE_Thrift "${CMAKE_INSTALL_PREFIX}/bin/Thrift.dll")

关于c# - 将 DLL 引用添加到基于 CMake 的 C# 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51399992/

65 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com