c# - CMake CSharp 引用 nuget 包

标签 c# visual-studio cmake nuget

我有一个通过 CMake 配置的 CSharp 项目,我在引用 nuget 包时遇到问题。我尝试通过以下方式添加它们:

set_property(TARGET ${PROJECT_NAME} PROPERTY VS_DOTNET_REFERENCES
"../../packages/ExcelDna.Integration.0.34.6/lib/ExcelDna.Integration.dll")

恢复 nuget 包后,我仍然必须在 Visual Studio (2015) 中双击引用才能成功编译程序。此外,是否有独立于版本号的方法来添加对 nuget 包的引用?以及如何添加某些包(例如 ExcelDna.AddIn)所需的 ExtensionTargets

最佳答案

编辑:自 CMake 3.15 起,CMake 支持使用 VS_PACKAGE_REFERENCES 引用 Nuget 包.与手动恢复 Nuget 包和在 CMake 中对包路径进行硬编码相比,这是一种更简洁的解决方案。 VS_PACKAGE_REFERENCES target 属性现在为您处理所有这些开销。

要将 Nuget 包引用添加到 CMake 目标,请使用下划线分隔的包名称和包版本 _ ,像这样:

set_property(TARGET ${PROJECT_NAME}
    PROPERTY VS_PACKAGE_REFERENCES "ExcelDna.Integration_0.34.6"
)

您可以使用 * 获取范围内的任何版本号, 并使用分号附加多个包:

set_property(TARGET ${PROJECT_NAME}
    PROPERTY VS_PACKAGE_REFERENCES "ExcelDna.Integration_0.34.*;ExcelDna.AddIn_1.0.0"
)

您可以使用 VS_DOTNET_REFERENCE_<YourLibrary> 让 CMake 找到您的 Nuget 包引用。试试这个:

set_property(TARGET ${PROJECT_NAME} PROPERTY 
    VS_DOTNET_REFERENCE_ExcelDna.Integration 
    ${CMAKE_BINARY_DIR}/packages/ExcelDna.Integration.0.34.6/lib/ExcelDna.Integration.dll
)

注意,完整的 DLL 名称必须附加到 VS_DOTNET_REFERENCE_指令创建完整的变量。但是,我还没有看到独立于版本号的方式来加载 Nuget 包,我不得不手动编辑我的 CMake 文件以包含这些包。你可以看看this answer以获得更详细的解释。

关于c# - CMake CSharp 引用 nuget 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50250470/

相关文章:

c# - 删除 C# 不安全指针

c# - C#中的另一种获取属性名(这个是静态的)

c# - 除了相应的 `foreign key Id` 之外,我还应该定义 `navigation property` 属性吗?

c# - ApiController 操作无法从查询字符串中解析数组

c++ - Visual Studio 2012 Express编译器无法正确将头文件链接在一起

c# - 使用 asp.net 和 c# 验证服务器端

visual-studio - 独立开发人员获得现代 Microsoft 源代码控制的最佳途径?

Android 项目缺少 CMake 许可证

CMAKE 如何获取目标文件位置

c++ - qmake 相当于 cmake execute_process()