2017-09-26 55 views
1

我有一個包含我的項目中引用的內容文件的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   
) 

回答

2

如何解決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

相關問題