首页 > 解决方案 > CMake CSharp 参考 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 包的引用?以及如何添加ExtensionTargets某些软件包(例如 ExcelDna.AddIn)所需的内容?

标签: c#visual-studiocmakenuget

解决方案


编辑:从 CMake 3.15 开始,CMake 支持使用VS_PACKAGE_REFERENCES. 这是一个比手动恢复 Nuget 包和在 CMake 中硬编码包路径更简洁的解决方案。VS_PACKAGE_REFERENCES目标属性现在为您处理所有这些开销。

要将 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 文件以包含这些包。您可以查看此答案以获取更详细的说明。


推荐阅读