使用MonoDevelop进行nuget包恢复

时间:2013-07-20 04:23:42

标签: monodevelop nuget

我有一个主要在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 / reference,但是文件夹在工作目录中名为package_name.version /。

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

1 个答案:

答案 0 :(得分:3)

您是否尝试使用-o command line parameter with NuGet.exe?您可以使用它来将软件包安装到特定的软件包文件夹中。

MonoDevelop的NuGet插件支持从version 0.6或更高版本恢复包。右键单击您的项目,然后选择Restore Packages。这将下载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" />

您还需要在计算机上启用程序包还原。您可以在“选项”对话框中使用NuGet插件进行MonoDevelop。在Linux下,可从“首选项”下的“编辑”菜单中获取。然后查看NuGet - General选项,并且有一个用于启用包恢复的复选框。

Jonathan Channon创建了一个example project on GitHub,它使用包恢复,并在MonoDevelop内部使用xbuild构建时工作。 GitHub about using NuGet restore on Linux上还有一个可能有用的问题。

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