遷移專案MSBuild-Integrated Package Restore至Automatic Packages Restore

遷移MSBuild-Integrated Package Restore專案至Automatic Packages Restore

nuget參考錯

在前面VSO簽出packages少了dll怎麼辦?因為是採用NuGet Packages簽入VSTS版控(VSO改名為VSTS)碰到一些問題,還好平常都是看黑大的文章長大的,沒有花費許多時間就順利把問題排除。不過,最近在整理一個舊專案時,在不同電腦簽出之後實在很容易碰到NuGet套件的問題,有了第一次成功的經驗當然信心滿滿,立馬進行舊專案升級使用Automatic Packages Restore。結果就是上圖…

刪除NuGet組態

按照前文,我們進行了.nuget目錄的刪除,這樣會把下面三個MSBuild-Integrated Package Restore所使用的組態與.exe給刪除:

  • NuGet.Config
  • NuGet.exe
  • NuGet.targets

並把專案目錄下的packages目錄刪除。重新簽入(簽入後建議把本機版本刪除)與簽出(確認最新無.nuget與packages目錄版本)。其實到這裡都沒有錯,重新建置能看到 NuGet 有進行套件還原的動作,packages目錄也順利出現在專案目錄之下,建置就會如上圖一樣,一堆黃色三角型,一堆找不到參考元件的錯誤。

如果有碰到上述問題(我這個專案是有段時間的舊專案),請在進行以下動作。

請開啟方案中的專案檔(*.csproj / *.vbproj)並移除下列所有XML標籤:

<RestorePackages>true</RestorePackages>  
...
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" /> 
...
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
  <PropertyGroup>
    <ErrorText>此專案參照此電腦中缺少的  NuGet 套件。啟用「NuGet 套件還原」以便下載。如需詳細資訊,請參閱 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的檔案為 {0}。</ErrorText>
  </PropertyGroup>
  <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target> 
 

除了第一行那個項目,其他可以用nuget.targets為關鍵字搜尋,移除任何nuget.targets參考設定。重新開啟專案並建置,就能看到參考都已是正常狀態。

說個小密秘,這篇還是參考黑大同一篇文章裡的參考連結快速解決的 :) 。

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。