如何解决项目预建事件中的Nuget包版本和路径?

时间:2017-09-26 14:36:34

标签: visual-studio nuget visual-studio-2017

我有一个NuGet包,其中包含我的项目中引用的内容文件。在新计算机上获取最新信息时,构建失败,因为NuGet Restore不会复制内容文件。所以我想做的是:

In PreBuild
If my Content file doesn't exist,
    run this nuget Command: "Update-Package My.Nuget.Sources -reinstall"

由于Nuget文件的版本控制和访问nuget,我正在努力确定路径差异。如何在下面实际生成SourceOnlyNugetVersionNugetPath变量?

if not exist "$(ProjectFolder)App_Packages\My.NuGet.Sources.$(SourceOnlyNugetVersion?)\somefile.cs" (
    "$(NugetPath)nuget.exe" Update-Package My.NuGet.Sources -reinstall        
) 

1 个答案:

答案 0 :(得分:2)

  

如何解决项目预建事件中的Nuget包版本和路径?

如果你想在Pre-build事件中自动重新安装软件包,恐怕你现在无法实现它。

我们可以使用命令Update-Package -Id <package_name> –reinstall在软件包管理器控制台中将软件包重新安装到您的项目中,但不可能自动执行该软件包。

如果要在构建事件中自动执行它,则必须调用NuGet CLI而不是Package Manager控制台。因为 NuGet CLI不修改项目文件或packages.config ;以这种方式,它类似于恢复,因为它只将包添加到磁盘,但不会改变项目的依赖性。请参阅NuGet CLI reference

操作在 NuGet CLI

上安装软件包

enter image description here

相反,操作在软件包管理器上安装软件包:

  

将程序包及其依赖项安装到项目中。

因此我们无法使用NuGet CLI为项目重新安装NuGet包。

此外,我们无法在visual studio外部使用Package Manager控制台powershell,因为包管理器控制台提供的是对visual studio对象的访问。

https://github.com/NuGet/Home/issues/1512

同样,我们无法在构建事件中使用程序包管理器控制台,构建事件由MSBuild运行,因此在从命令行运行构建时需要工作。

所以似乎不可能自动重新安装NuGet包,或者替代方法是编写一个使用NuGet.Core.dll来执行与PowerShell脚本相同操作的控制台应用程序。

相关问题