我们有针对 vsix 项目的解决方案。直到 Visual Studio 15.4 版软件包都是使用 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 已插入包中。
我已将程序集插入清单的资产中,但程序集未插入,因此失败。
我们更新了依赖项,以确保我们使用相同的版本 NewtonSoft 9.0.0。
我们如何解决这个问题,考虑到我们不想更改构建机器上的 SDK.targets,因为它在开发机器上会失败。
是否可以在资产中添加相对路径?如果是,怎么办?因为我已经尝试过,并且 newtonsoft 它没有插入。
https://social.msdn.microsoft.com/Forums/en-US/550ddfdc-027c-41ba-9b32-31e6391bc038/newtonsoftjsondll-not-included-in-vsix?forum=vsx https://social.msdn.microsoft.com/Forums/en-US/550ddfdc-027c-41ba-9b32-31e6391bc038/newtonsoftjsondll-not-included-in-vsix?forum=vsx
** UPDATE **
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>
然后可以通过 VSIX 清单编辑器轻松添加该文件作为Microsoft.VisualStudio.Assembly
。这应该会导致以下结果Asset
在 .vsixmanifest 文件中定义。
<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
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)