我应该如何在 VSIX 项目中包含包引用
How should I include Package References in a VSIX project
我的解决方案使用多个 NuGet 包从多个项目创建一个 Visual Studio 包。
所有 Nuget 包都使用 PackageReference(而不是旧的 packages.config 文件)在项目文件中指定。我正在使用 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 中,而不用这些其他文件膨胀安装?
您可以使用像这样的简单脚本:
<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 的提示,感谢他。
希望对您有所帮助:)
我的解决方案使用多个 NuGet 包从多个项目创建一个 Visual Studio 包。
所有 Nuget 包都使用 PackageReference(而不是旧的 packages.config 文件)在项目文件中指定。我正在使用 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 中,而不用这些其他文件膨胀安装?
您可以使用像这样的简单脚本:
<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 的提示,感谢他。
希望对您有所帮助:)