【问题标题】:How should I include Package References in a VSIX project我应该如何在 VSIX 项目中包含包引用
【发布时间】:2019-12-18 07:35:48
【问题描述】:

我的解决方案使用多个 NuGet 包从多个项目创建一个 Visual Studio 包。

在项目文件中使用 PackageReference(而不是旧的 packages.config 文件)指定所有 Nuget 包。我正在使用 Visual Studio 2019。

我遇到了一个问题,即 NuGet 包引用的 DLL 未包含在 VSIX 安装中。

this article by Daniel Cazzulino 中描述了此问题的解决方案,方法是在项目文件中添加以下代码:

<PropertyGroup>
  <GetVsixSourceItemsDependsOn>$(GetVsixSourceItemsDependsOn);IncludeNuGetResolvedAssets</GetVsixSourceItemsDependsOn>
</PropertyGroup>
<Target Name="IncludeNuGetResolvedAssets" DependsOnTargets="ResolveNuGetPackageAssets">
  <ItemGroup>
    <VSIXCopyLocalReferenceSourceItem Include="@(ReferenceCopyLocalPaths)"  /> 
  </ItemGroup>
</Target>

这确实有效,但它将安装的大小从大约 20MB 扩大到大约 40MB。

现在安装包含很多 PDB 文件,我真的不需要。

更重要的是,它引入了大约 46MB 的 Visual Studio DLL,这是不必要的,因为它们是 Visual Studio 的一部分。

有没有更好的方法来确保引用的 NuGet 包包含在 VSIX 中,而不用这些其他文件夸大安装?

【问题讨论】:

    标签: visual-studio msbuild nuget visual-studio-extensions


    【解决方案1】:

    您可以使用这样的简单脚本:

    <Target Name="IncludeNuGetPackageReferences" AfterTargets="GetVsixSourceItems">
      <ItemGroup>
        <VSIXSourceItem Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' == 'Newtonsoft.Json'" />
        <VSIXSourceItem Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' == 'xxx'" />
     ... </ItemGroup>
    </Target>
    

    您可以指定哪些程序集应包含在 .vsix 中。在我的机器上进行测试后,它不会复制unnecessary VS assemblies。来自smourier 的提示,感谢他。

    希望对你有帮助:)

    【讨论】:

    • 非常感谢您的回答。我还没有时间尝试,但我很快就会尝试。如果可行,我一定会将其标记为答案。
    • 这个去哪儿了?在csproj? (您是否错过了结束
    • 是的,您可以在项目节点内的 csproj 中添加脚本。只需更新itemgroup的结束标签,谢谢提醒。
    猜你喜欢
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多