如何解决项目预生成事件中的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路径差异挣扎。我如何实际生成下面的SourceOnlyNugetVersion
和NugetPath
变量?
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安装软件包:
相反,操作上软件包管理器安装包:
安装程序包及其依赖到项目。
因此我们无法使用NuGet CLI为项目重新安装NuGet包。
此外,我们无法使用Visual Studio以外的包管理器控制台powershell,因为包管理器控制台提供的是访问Visual Studio对象。
https://github.com/NuGet/Home/issues/1512
同样,我们不能在构建时使用软件包管理器控制台,建立事件是由MSBuild的所以它需要在构建从命令行中运行的工作运行。
因此,似乎不可能自动重新安装NuGet软件包,或者另一种方法是编写一个使用NuGet.Core.dll执行与PowerShell脚本相同的操作的控制台应用程序。
我真的只需要安装内容文件,因为我使用的是源代码包。我创建了一个EXE来执行此操作:https://github.com/daryllabar/DLaB.Xrm.XrmToolBoxTools/raw/master/References/NuGetContentInstaller.exe只需在预构建中调用它,并将SolutionDirectory和ProjectPath作为参数传入PARAMS – Daryl