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

问题描述:

我有一个包含我的项目中引用的内容文件的NuGet包。当获得最新的机器时,构建失败,因为NuGet Restore不复制内容文件。因此,我想要做的是这样的:如何解决项目预生成事件中的Nuget包版本和路径?

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   
) 

如何解决NuGet包版本和路径在一个项目的预构建事件?

如果您想在预生成事件中自动重新安装包,恐怕目前您无法实现。

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

如果要在生成事件中自动执行它,则必须调用NuGet CLI而不是Package Manager Console。因为NuGet CLI不修改项目文件或packages.config;通过这种方式,它与恢复类似,只是将软件包添加到磁盘,但不会更改项目的依赖项。请参阅NuGet CLI reference

操作上的NuGet CLI安装软件包:

enter image description here

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

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

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

此外,我们无法使用Visual Studio以外的包管理器控制台powershell,因为包管理器控制台提供的是访问Visual Studio对象。

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

同样,我们不能在构建时使用软件包管理器控制台,建立事件是由MSBuild的所以它需要在构建从命令行中运行的工作运行。

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

+0

我真的只需要安装内容文件,因为我使用的是源代码包。我创建了一个EXE来执行此操作:https://github.com/daryllabar/DLaB.Xrm.XrmToolBoxTools/raw/master/References/NuGetContentInstaller.exe只需在预构建中调用它,并将SolutionDirectory和ProjectPath作为参数传入PARAMS – Daryl