簡體   English   中英

恢復nuget包的最佳方法是什么?

[英]What is the best way to restore nuget packages?

我有一個使用自定義nuget包源的解決方案。 現在,我在解決方案文件附近的Nuget.config文件中指定它們(以便從源代碼管理中檢出):

|- MySoulution.sln
|- MyProjFolder
|- .nuget
   |- Nuget.exe
   |- Nuget.config
   |- Nuget.targets

從VisualStudio構建解決方案時,此方法效果很好。 它設法讀取此nuget.config文件並成功還原所有軟件包。

現在,我正在配置要從TeamCity構建的解決方案。 因此,我添加了項目配置和構建步驟。 但是,TeamCity不會默認還原nuget軟件包。 因此,我為解決方案添加了一個單獨的Nuget installer構建步驟,該步驟運行nuget(特定版本)還原。 但是問題是,似乎沒有從解決方案文件旁邊的.nuget文件夾中的Nuget.config文件中看到我的自定義nuget包源。

我看到兩種可能的方法來克服此問題:

  1. Nuget installer構建步驟中配置我的自定義軟件包源。
  2. 在構建計算機上AppData文件夾中的Nuget.config中配置我的自定義程序包源。

我不喜歡這兩種方法,因為它們沒有為我提供從TeamCity和VisualStudio進行構建的單一配置。

總而言之,問題是:如何配置自定義程序包源,以便它們在TeamCity和VisualStudio中都可見,而無需我在不同位置進行多次配置?

如何配置我的自定義程序包源,以使它們在TeamCity和VisualStudio中都可見,而無需在不同位置進行多次配置?

如您所知,如果您不想在不同位置多次配置自定義nuget源,則可以在NuGet.config中設置自定義nuget源,並將其添加到源代碼控制中。 因此,解決問題的關鍵是為什么NuGet不尊重解決方案文件旁邊.nuget文件夾中Nuget.config文件中的自定義nuget包源。

就像我的評論一樣,如果您使用的是NuGet 2.7或更高版本,並且仍為MSBuild集成還原配置了解決方案,則解決方案的.nuget文件夾中可能具有nuget.exe的較舊版本。 這將導致構建失敗,並顯示一條錯誤,指出您未同意還原軟件包。 為避免此問題,建議使用MSBuild集成還原遷移任何項目,以使用NuGet 2.7及更高版本的自動還原功能,您可以按照以下過程進行操作:

  1. 關閉Visual Studio,以避免潛在的文件鎖定和沖突。

  2. 如果使用TFS:從解決方案的.nuget文件夾中刪除nuget.exe和NuGet.targets,然后從解決方案工作區中刪除這些文件。 如禁用Team Foundation版本控制程序中所述,使用disableSourceControlIntegration設置保留Nuget.Config。

  3. 如果不使用TFS:從解決方案和解決方案工作區中刪除.nuget文件夾。

  4. 編輯解決方案中的每個項目文件,刪除元素,並刪除對NuGet.targets文件的任何引用。 這些設置通常如下所示:

之后,將NuGet.config放在帶有自定義NuGet源的解決方案文件旁邊:

<?xml version="1.0" encoding="utf-8"?>
   <configuration>
     <solution>
       <add key="disableSourceControlIntegration" value="true" />
     </solution>

    <packageSources>
      <add key="CustomSource" value="http://CustomSource/nuget" />
    </packageSources>

    <packageRestore>
      <add key="enabled" value="True" />
    </packageRestore>

  </configuration>

現在,在NuGet Installer步驟中,現在有一個“ Package Sources ”字段,您可以填寫以使Team City使用自定義提要:

在此處輸入圖片說明

您可以參考此文檔使用TeamCity還原NuGet軟件包以獲取更多詳細信息。

此外,我們還可以在.nuget文件夾中的NuGet.targets文件中指定自定義供稿 (我尚未驗證):

<ItemGroup Condition=" '$(PackageSources)' == '' ">
    <PackageSource Include="https://nuget.org/api/v2/" />
    <PackageSource Include="\\MyShare" />
    <PackageSource Include="http://MyServer/" />
</ItemGroup>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM