VSIX newtonsoft不在包中(VS> 15.5)压缩包

时间:2018-04-24 13:33:13

标签: c# .net visual-studio visual-studio-2017 vsix

我们有一个针对vsix项目的解决方案。直到15.4版的visual studio软件包都是用newtonsoft.json.dll生成的,但是从那个版本开始,newsoft被排除在软件包之外。

对于我所看到的,这是因为“Microsoft.VsSDK.targets”位于“C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ MSBuild \ Microsoft \ VisualStudio \ v15.0 \ VSSDK \ Microsoft.VsSDK.targets“有一个新的排除规则”“

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

我们做过的测试: 我从VsSDK.targets中删除了这个例外,它的工作原理是因为在软件包上插入了newtonsoft。

我已经在清单的Assets上插入了程序集,但是没有插入程序集,因此它失败了。

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

我们如何解决这个问题,考虑到我们不想在构建机器上更改SDK.targets,因为它会在开发者机器中失败。

是否可以在Assets中添加相对路径?如果有,怎么样?因为我已经尝试过并且没有插入newtonsoft。

https://social.msdn.microsoft.com/Forums/en-US/550ddfdc-027c-41ba-9b32-31e6391bc038/newtonsoftjsondll-not-included-in-vsix?forum=vsx

** 更新 **

版本15.7.4仍有此问题

谢谢

2 个答案:

答案 0 :(得分:1)

将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>

然后可以通过VSIX清单编辑器将文件轻松添加为Microsoft.VisualStudio.Assembly。这将导致在.vsixmanifest文件中定义以下Asset

<Asset d:Source="File" Path="Newtonsoft.Json.dll" Type="Microsoft.VisualStudio.Assembly" AssemblyName="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" />

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

答案 1 :(得分:1)

VS行为是为了防止您运送Newtonsoft.Json的副本。这样做的原因是VS会自己提供一个副本(或在某个时间点复制多个副本...),并包括对该版本的绑定重定向。即使您要在VSIX中放置一个,也绝不能加载它。

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

这是在原始问题发布很长时间之后,但是如果您的%LocalAppData%\Microsoft\VisualStudio\15.0_<instanceID>\devenv.exe.config不包含代码库和Newtonsoft.Json的绑定重定向,我将打开反馈票证以跟进VS团队。< / p>