【问题标题】:CMake CSharp reference nuget packgesCMake CSharp 参考 nuget 包
【发布时间】:2018-05-09 09:55:51
【问题描述】:

我有一个通过 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 现在完全支持添加 Nuget 引用,无需您描述的手动步骤。请参阅我的更新答案。

标签: c# visual-studio cmake nuget


【解决方案1】:

编辑:从 CMake 3.15 开始,CMake 支持使用 VS_PACKAGE_REFERENCES 引用 Nuget 包。这是一个比手动恢复 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 文件以包含这些包。您可以查看this answer 以获得更详细的说明。

【讨论】:

  • 如果我使用 VS_PACKAGE_REFERENCES 将包引用添加到“YourLibrary”,是否需要添加VS_DOTNET_REFERENCE_<YourLibrary>?
  • 我可以看到包引用已添加到生成的 csproj 文件中(也通过 cmake 的源代码确认 - github.com/Kitware/CMake/blob/master/Source/…),尽管当我尝试使用“YourLibrary”时仍然看到链接错误。
  • @Naman 如果您使用的是 CMake 3.15 或更高版本,您应该只需要 VS_PACKAGE_REFERENCES 命令来引用 Nuget 包。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
相关资源
最近更新 更多