1

我有一个主要在 Visual Studio 2012 中开发的解决方案。我想在 MonoDevelop 中开发而没有重大不兼容性。

到目前为止,我已经为 MonoDevelop 安装了 mrward 的 nuget 插件,如果我通过该界面手动添加 packages.config 中的每个包,一切正常。然而,这是非常繁重的。在撰写本文时,此插件不支持自动包还原。

我从 CodePlex 下载了 nuget.exe(“NuGet 命令行实用程序”,因为它的标签)。我使用一个简单的 find/xargs 组合来安装所有必需的包:

find . -name packages.config | xargs -I '{}' mono nuget.exe install '{}'

这会在运行它的目录中创建几十个目录,而不是像预期的那样将东西放在 packages/ 下,并且它也不会触及项目文件,因此 MonoDevelop 仍然认为它应该在目录中查找包引用MonoDevelop 已启动。

因此,我从包含所有这些包文件夹的工作目录中打开了 MonoDevelop,但我仍然得到无效的引用。我认为这可能是因为该项目正在寻找 package_name/ 参考,但工作目录中的文件夹名称为 package_name.version/。

对于与此解决方案进行交互的理智、简单的方法有什么建议吗?接下来我将尝试修改我的 shell 命令,以便它自动下降到项目/包并从该目录运行 nuget。

4

1 回答 1

3

您是否尝试在NuGet.exe 中使用 -o 命令行参数?您可以使用它来将软件包安装到特定的软件包文件夹中。

MonoDevelop 的 NuGet 插件支持从0.6或更高版本恢复包。右键单击您的项目并选择恢复包。这将为解决方案中的所有项目下载您的 packages.config 中定义的所有包。它使用 NuGet.exe 来执行此操作。

另一种实现此功能的方法是使用自定义 NuGet MSBuild 目标,以便在使用 xbuild 时在构建时进行包还原。不过,这将需要对项目文件进行一些手动编辑。在幕后,自定义 MSBuild 目标仅使用 NuGet.exe,其命令行与您已经指定的输出目录选项类似。所以我会尝试命令行方法,因为这样会减少工作量。

您必须从 codeplex 上的 NuGet 存储库获取以下文件:

  • NuGet.exe
  • NuGet.targets
  • NuGet.config

将这些放在某个目录中。通常,这些文件放在与解决方案文件相同的目录中的 .nuget 目录中。然后,您需要编辑项目文件以包含 NuGet.targets 文件并定义 SolutionDir 属性。所以是这样的:

<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir> 

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" />

您还需要在您的机器上启用包还原。您可以在“选项”对话框中使用 MonoDevelop 的 NuGet 插件来执行此操作。在 Linux 下,这可以从 Preferences 下的 Edit 菜单中获得。然后查看 NuGet - 常规选项,并有一个用于启用包还原的复选框。

在 GitHub 上有一个由 Jonathan Channon 创建的示例项目,它使用包还原并在 MonoDevelop 中使用 xbuild 构建时工作。GitHub 上还有一个关于在 Linux 上使用 NuGet 还原的问题,这可能会有所帮助。

更新:2014-05-14:MonoDevelop 的 NuGet 插件现在支持包还原。

于 2013-07-20T11:21:32.283 回答