gpt4 book ai didi

c# - VSIX newtonsoft 不在包中 (VS>15.5) 抑制包

转载 作者:太空狗 更新时间:2023-10-30 01:13:31 24 4
gpt4 key购买 nike

我们有一个针对 vsix 项目的解决方案。在使用 newtonsoft.json.dll 生成 visual studio 包的版本 15.4 之前,但是,从那个版本开始,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 被插入到包中。

我已经在 list 的 Assets 上插入了程序集,但是没有插入程序集,所以失败了。

我们更新了我们的依赖项,以确保我们使用相同的版本,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版本还有这个问题

谢谢

最佳答案

将 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 list 编辑器将文件作为 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.

关于c# - VSIX newtonsoft 不在包中 (VS>15.5) 抑制包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50003033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com