我有一个通过 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/