0

我知道已经有关于这个主题的多个问题,但它们似乎都已经过时了。澄清一下,我使用的是“新”VSIX 清单格式,并尝试遵循此处的官方说明:https ://docs.microsoft.com/en-us/nuget/visual-studio-extensibility/visual-studio-templates

我有一个项目模板和几个与之配套的项目模板。它们都依赖于部署应与 VSIX 本地捆绑的 NuGet 包。我检查了生成的 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匹配文件中的ID属性.vsixmanifest

  2. 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 安装packages.config的文件中删除了所有和所有包引用.csproj(甚至从 VSIX 项目本身中删除,只是为了更好地衡量)。

  2. 我检查了输出 VSIX,并且Packages在 VSIX 中确实有一个包含所有文件的.nupkg文件夹。此文件夹确实已解压缩并复制到 Visual StudioExtensions文件夹中。

尽管如此,当我使用模板创建一个新项目时,VS 会显示一条错误消息:无法从C:\users\<pathtoextensions>\Packages.

问题是,这些.nupkg文件实际上存在于错误消息所指的确切文件夹中。

我已经搜索了好几天了,但似乎找不到任何对实际有效的最佳实践的参考。这些 VSIX 清单似乎是针对传统packages.config的做事方式,并且有关于如何扩展它们以PackageReference替代使用的讨论。

任何人都可以就我们应该如何继续前进提供任何建议吗?包不再应该与 VSIX 一起部署吗?我们是否应该只用PackageReference条目填写项目并让用户手动解决它们?

我觉得我在这里遗漏了一些基本的东西,任何见解都将非常有价值。

更新:我还在 NuGet github 存储库上打开了一个问题,因为在恢复存储在 VSIX 安装程序中的包时,这显然是 PackageRestore 功能的问题。此问题中提到的所有其他内容都按预期和预期工作,但包还原除外。

4

1 回答 1

-1

您如何在面向 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包。

在此处输入图像描述

注意:还要确保检查 nuget url 并且可以在 Package Source 下访问。

包.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 包具有依赖项,您还应该将它们(以上步骤)添加到packages.config文件xxxx.csproj中。这个函数比你的要复杂一点,但它可以工作。所以,我建议你使用PackageReference格式。

更多信息你可以参考这个类似的问题

于 2020-04-07T07:50:30.670 回答