C# VSIX newtonsoft isn';封装中的t(VS>;15.5)抑制封装

C# VSIX newtonsoft isn';封装中的t(VS>;15.5)抑制封装,c#,.net,visual-studio,visual-studio-2017,vsix,C#,.net,Visual Studio,Visual Studio 2017,Vsix,我们有一个vsix项目的解决方案。然而,在使用newtonsoft.json.dll生成visual studio软件包的15.4版之前,由于该版本,newsoft被排除在软件包之外 就我所见,这是因为位于“C:\Program Files(x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\VsSDK\Microsoft.VsSDK.targets”中的“Microsoft.VsSD

我们有一个vsix项目的解决方案。然而,在使用newtonsoft.json.dll生成visual studio软件包的15.4版之前,由于该版本,newsoft被排除在软件包之外

就我所见,这是因为位于“C:\Program Files(x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\VsSDK\Microsoft.VsSDK.targets”中的“Microsoft.VsSDK.targets”具有新的排除规则

我们的解决方案需要NewtonSoft,如果我安装vsix时VS>=15.5,因为NewtonSoft不在包中,它无法在%appdata%\microsoft\visualstudio\extensions中请求此程序集

我们所做的测试: 我从VsSDK.targets中删除了这个排除项,它之所以有效,是因为newtonsoft插入到了包中

我已在清单的资产上插入程序集,但程序集未插入,因此,它失败

我们已经更新了dependendies,以确保使用相同的版本NewtonSoft 9.0.0

考虑到我们不想更改构建机器上的SDK.targets,因为它将在开发人员机器上失败,我们如何解决这个问题呢

是否可以在资源中添加相对路径?如果是,如何进行?因为我试过了,newtonsoft没有插入

**更新**

版本15.7.4仍然存在此问题


谢谢

将Newtonsoft.Json.dll作为链接项包含在扩展csproj中

<Content Include="..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll">
  <Link>Newtonsoft.Json.dll</Link>
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  <IncludeInVSIX>true</IncludeInVSIX>
</Content>

这远不是一个完美的解决方案,因为此链接项目不会随软件包升级而升级,您必须自己管理。显然,一个完美的解决方案根本不需要这样做,Newtonsoft.Json.dll将像任何其他引用的程序集一样包含在内。但是,这是我们发现的入侵性最小的解决方案,它允许我们控制vsix包中包含的Newtonsoft.Json.dll的版本,并且不依赖于
C:\Program Files(x86)中的版本\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\PrivateSassemblies

VS行为旨在阻止您发送Newtonsoft.Json的副本。这样做的原因是VS本身提供了一个副本(或在一个时间点上提供了多个副本…),并包括一个到该版本的绑定重定向。即使要在VSIX中放置一个,也不应该以任何方式加载它

如果您通过某种方式强制VS加载您的Newtonsoft.Json版本,您就有机会打破VS中依赖于VS包含的版本的其他功能


这是在原始问题发布后很久,但是如果您的
%LocalAppData%\Microsoft\VisualStudio\15.0\uu\devenv.exe.config
不包含Newtonsoft.Json的代码库和绑定重定向,我会打开一张反馈单与VS团队跟进。

使用这种方法可能会破坏VS中依赖特定版本Newtonsoft.Json(即PrivateSassemblies中的版本)的其他功能。visual studio的版本也会锁定特定版本的DLL(即System.Collections.Immutable)。有这些特殊DLL的公开列表吗?
<Asset d:Source="File" Path="Newtonsoft.Json.dll" Type="Microsoft.VisualStudio.Assembly" AssemblyName="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" />