2013-07-20 144 views
0

我有一个解决方案,主要是在Visual Studio 2012中开发的。我想在MonoDevelop中开发,没有严重的不兼容性。Nuget包恢复与MonoDevelop

到目前为止,我已经为MonoDevelop安装了mrward的nuget插件,如果我通过该接口手动将packages.config中的每个包添加到工具中,这些工作都可以正常工作。但是,这是非常繁重的。在撰写本文时,此插件不支持自动恢复包。

我从CodePlex下载了nuget.exe(“NuGet命令行工具”,因为它已标记)。我用一个简单的查找/ xargs的组合安装所有需要的软件包:

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

。这将创建其运行的,而不是把东西下包/如预期在目录几十个目录,它也不会触摸项目文件,MonoDevelop仍然认为它应该在MonoDevelop所在的目录中查找软件包引用。

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

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

+0

答案提供了帮助吗?如果没有,你能否提供你自己的解决方案? –

回答

3

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

MonoDevelop的NuGet插件支持从version 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下,可以从首选项下的编辑菜单中获得。然后查看NuGet - General选项,并且有一个用于启用程序包恢复的复选框。

有一个由Jonathan Channon创建的example project on GitHub,它使用包恢复并在MonoDevelop中使用xbuild构建时工作。 GitHub about using NuGet restore on Linux也有一个问题,这可能会有所帮助。

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