【问题标题】:How to deal with x86 vs x64 packages如何处理 x86 与 x64 包
【发布时间】:2013-08-27 12:51:04
【问题描述】:

我们使用NuGet 来管理我们的第三方包。

我们还必须同时构建 x86x64 构建。

我们现在依赖于一个依赖于 C dll 的 NuGet 包 (zeromq),因此具有 x86x64 版本。

在 Nuget 中搜索时,我只看到两个不同的项目(zeromq x64 和 zeromq x86),而不是一个统一的项目。

约束

我们在开发人员机器上的构建过程是在 Visual Studio 中选择适当的配置(即 Debug/x86、Release x64 等)并进行构建,因此我们使用的任何解决方案都必须适合 Visual Studio GUI(即 MSBuild 解决方案不太适合我们当前的工作流程)。

编辑

约束的附录....如果我们不能在 NuGet 中自动执行此操作,是否可以使用某种 powershell 预构建脚本来执行此操作?即,如果我们知道我们正在构建 x86 版本,是否有办法挂钩 NuGet,以便它使用 x86 包而不是 x64 包?

像这样管理 NuGet 包的正确方法是什么??

【问题讨论】:

  • 您可能需要查看this answer,它可能会给您一些关于条件预构建脚本的灵感。

标签: c# visual-studio-2012 nuget


【解决方案1】:

那么你有两种方法,

  • 创建自己的 ZeroMQ fork 并按照 System.Data.SQLite.org 实现 Native Library Pre-loading。然后,您可以创建一个 NuGet 包而不是两个。

  • 为您的可执行文件创建两个项目(相同的源代码,只有两个项目文件)。一个用于 x86,另一个用于 x64。将 ZeroMQ 的 x86 包添加到您的 x86 包中,而将 ZeroMQ 的 x64 包添加到您的 x64 中。它很丑陋,但 IHMO 避免了在您的项目文件中进行调节(任何错误的 MSBuild 解析器都可以轻松破坏)。

【讨论】:

  • 谢谢 Lex,我以为会这样。
  • 我目前正在接受这个答案,因为它至少提供了一些解决方法。希望将来可以通过 NuGet 解决这个问题,我们可以选择一个新的答案!
  • 这方面有改善吗?我有完全相同的问题
【解决方案2】:

我认为看的好地方是http://docs.nuget.org/docs/reference/package-manager-console-powershell-reference

据我了解,NuGet 实际上只是用于构建的 Powershell。我建议根据当前正在编译的平台 (86/64) 设置条件构建,然后将 Get-Package 过滤到您需要的版本。

【讨论】:

  • 谢谢马克,我会看看文档,看看我能不能破解一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
  • 2012-05-06
  • 2015-07-24
相关资源
最近更新 更多