c# - 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)所需的内容?
解决方案
编辑:从 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 文件以包含这些包。您可以查看此答案以获取更详细的说明。
推荐阅读
- kibana - 来自 Kibana 的应用程序日志分析
- go - 不能在字段值中使用 (type []map[string]interface {}) 作为 type []string
- c# - 如何从另一个页面重定向到主页而不丢失用户在主页上的输入数据?
- android - Retrofit2 和 Moshi:发送没有嵌套对象的 JSON
- php - 为什么这个加法函数有时在 PHP 中不起作用?
- python - 项目有两个用户表的 Django 中的完整性错误?
- java - 不使用通配符编写 Collections.addAll(Collection c, T... elements)
- java - 使用增强的 for 循环搜索 LinkedList
- android - PlayStore - 以下 APK 或应用程序包可在 64 位设备上使用,但只有本机 32 位代码:1
- java - 为什么我的 Reference(URI "") 解析为 ds:Manifest,而不是根元素,因为它应该?