簡體   English   中英

如何讓 NuGet package 恢復以處理存儲在 VSIX 中針對 Visual Studio 2019 的本地部署包?

[英]How do you get NuGet package restore to work on locally deployed packages stored in VSIX targeting Visual Studio 2019?

我知道關於這個主題已經有多個問題,但它們似乎都已經過時了。 澄清一下,我使用的是“新”VSIX 清單格式,並嘗試遵循此處的官方說明: https://docs.microsoft.com/en-us/nuget/visual-studio-extensibility/visual-studio-templates

我有一個項目模板和幾個 go 的項目模板。 它們都依賴於部署 NuGet package,它應該與 VSIX 本地捆綁在一起。 我檢查了生成的 VSIX 文件,所有文件似乎都在正確的位置:

  1. 項目模板具有用於聲明要安裝哪些軟件包所需的 XML:
  <WizardExtension>
    <Assembly>NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly>
    <FullClassName>NuGet.VisualStudio.TemplateWizard</FullClassName>
  </WizardExtension>
  <WizardData>
    <packages repository="extension" repositoryId="VsixID.etc.etc">
      <package id="Rx-Linq" version="2.2.5" />
    </packages>
  </WizardData>
  1. repositoryID.vsixmanifest文件中的ID屬性匹配。

  2. 每個 package 都有一個單獨的Asset條目,格式為:

    <Asset Type="Rx-Linq.2.2.5.nupkg" d:Source="File" Path="Packages\Rx-Linq.2.2.5.nupkg" d:VsixSubPath="Packages" />
  1. 我已經從 VSIX 安裝的.csproj文件中刪除了所有packages.config和所有 package 引用(甚至從 VSIX 項目本身中刪除,只是為了更好地衡量)。

  2. 我檢查了 output VSIX 並且在 VSIX 中確實有一個Packages文件夾,其中包含所有.nupkg文件。 此文件夾確實已解壓縮並復制到 Visual Studio Extensions文件夾中。

盡管如此,當我使用模板創建一個新項目時,VS 會顯示一條錯誤消息: Failed to restore package from C:\users\<pathtoextensions>\Packages

問題是, .nupkg文件實際上存在於錯誤消息所指的確切文件夾中。

我已經搜索了好幾天了,但似乎找不到任何對實際有效的最佳實踐的參考。 這些 VSIX 清單似乎是針對傳統的packages.config做事方式而設計的,並且有關於如何擴展它們以使用PackageReference的討論。

任何人都可以就我們應該如何繼續前進提供任何建議嗎? 包不再應該與 VSIX 一起部署嗎? 我們是否應該只用PackageReference條目填寫項目並讓用戶手動解決它們?

我覺得我在這里遺漏了一些基本的東西,任何見解都將非常有價值。

更新:我還在 NuGet github 存儲庫上打開了一個問題,因為在恢復存儲在 VSIX 安裝程序中的包時,這顯然是 PackageRestore 功能的問題。 除了 package 恢復之外,此問題中提到的所有其他內容均按預期工作。

您如何在面向 Visual Studio 2019 的 Visual Studio 項目模板 VSIX 中實際包含 NuGet 包?

實際上,沒有辦法在 VS 項目模板項目中指定 nuget 包可以同時使用packages.configPackageReference 只能單獨創建nuget管理類型的兩個項目模板。

我有一個簡單的方法,由於您對PackageReference格式有一些問題,您可以試試這個功能:

包參考

1)在 projecttemplate.csporj 文件中添加這些參考節點:

在此處輸入圖像描述

   <ItemGroup>
    <PackageReference Include="Rx-Linq">
      <Version>2.2.5</Version>
    </PackageReference>
  </ItemGroup>

2)當你通過這個工程模板創建工程時,請勾選這兩個選項,VS會在構建過程中自動讀取xxx.csproj ,然后根據里面的信息恢復對應的nuget package。

在此處輸入圖像描述

注意:還要確保選中 nuget url 並且可以在 Package 源下訪問。

包.config

此外,對於packages.config ,您只需創建一個名為packages.config的文件,然后將您的 nuget 信息添加到其中:

1)

2)將這些添加到projecttemplate.csproj文件中:

<ItemGroup>
  <Content Include="packages.config">
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
 </ItemGroup>
<ItemGroup>
    <Reference Include="Rx-Linq, Version=2.2.5, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL">
      <HintPath>..\packages\Rx-Linq.2.2.5\lib\net472\xxxxxxx.dll</HintPath>
    </Reference>
</ItemGroup>

注意:如果這個 nuget package 有依賴關系,你也應該將它們(以上步驟)添加到packages.configxxxx.csproj文件中。 這個函數比你的要復雜一點,但它可以工作。 所以,我推薦你使用PackageReference格式。

更多信息你可以參考這個類似的問題

暫無
暫無

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

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