我有一个NuGet包,其中包含我的项目中引用的内容文件。在新计算机上获取最新信息时,构建失败,因为NuGet Restore不会复制内容文件。所以我想做的是:
In PreBuild
If my Content file doesn't exist,
run this nuget Command: "Update-Package My.Nuget.Sources -reinstall"
由于Nuget文件的版本控制和访问nuget,我正在努力确定路径差异。如何在下面实际生成SourceOnlyNugetVersion
和NugetPath
变量?
if not exist "$(ProjectFolder)App_Packages\My.NuGet.Sources.$(SourceOnlyNugetVersion?)\somefile.cs" (
"$(NugetPath)nuget.exe" Update-Package My.NuGet.Sources -reinstall
)
答案 0 :(得分:2)
如何解决项目预建事件中的Nuget包版本和路径?
如果你想在Pre-build事件中自动重新安装软件包,恐怕你现在无法实现它。
我们可以使用命令Update-Package -Id <package_name> –reinstall
在软件包管理器控制台中将软件包重新安装到您的项目中,但不可能自动执行该软件包。
如果要在构建事件中自动执行它,则必须调用NuGet CLI而不是Package Manager控制台。因为 NuGet CLI不修改项目文件或packages.config ;以这种方式,它类似于恢复,因为它只将包添加到磁盘,但不会改变项目的依赖性。请参阅NuGet CLI reference。
操作在 NuGet CLI :
上安装软件包相反,操作在软件包管理器上安装软件包:
将程序包及其依赖项安装到项目中。
因此我们无法使用NuGet CLI为项目重新安装NuGet包。
此外,我们无法在visual studio外部使用Package Manager控制台powershell,因为包管理器控制台提供的是对visual studio对象的访问。
https://github.com/NuGet/Home/issues/1512
同样,我们无法在构建事件中使用程序包管理器控制台,构建事件由MSBuild运行,因此在从命令行运行构建时需要工作。
所以似乎不可能自动重新安装NuGet包,或者替代方法是编写一个使用NuGet.Core.dll来执行与PowerShell脚本相同操作的控制台应用程序。