VSIX newtonsoft отсутствует в пакете (VS> 15,5) - PullRequest
0 голосов
/ 24 апреля 2018

У нас есть решение для проектов 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, если я устанавливаю vsix с VS> = 15,5, что касается newtonsoft, которого нет в пакете, он не может запросить эту сборку в% appdata% \ microsoft \ visualstudio \ extensions.

Тесты, которые мы сделали: Я удаляю это исключение из VsSDK.targets, и оно работает, потому что newtonsoft вставлен в пакет.

Я вставил сборку в Активы манифеста, но сборка не вставлена, поэтому она не работает.

Мы обновили наши зависимости, чтобы убедиться, что мы используем ту же версию, NewtonSoft 9.0.0.

Как мы можем решить эту проблему, учитывая, что мы не хотим изменять цели SDK.targe на машине сборки, потому что она не будет работать на машине разработчика.

Можно ли добавить относительный путь в активы? если да, то как? потому что я пробовал и 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 голосов
/ 21 ноября 2018

Поведение VS предназначено для того, чтобы помешать вам отправить копию Newtonsoft.Json.Причина этого заключается в том, что VS отправляет саму копию (или несколько в один момент времени ...) и включает перенаправление привязки к этой версии.Даже если вы поместите один из них в свой VSIX, он никогда не должен загружаться.

Если вы каким-либо образом заставляете VS загружать вашу версию Newtonsoft.Json, вы создаете возможность нарушить другие функции внутриVS, которые зависят от версии, включенной в VS.

Это долго после того, как исходный вопрос был опубликован, но если ваш %LocalAppData%\Microsoft\VisualStudio\15.0_<instanceID>\devenv.exe.config не содержит кодовой базы и перенаправления привязки для Newtonsoft.Json, я бы открылБилет обратной связи с командой VS.

0 голосов
/ 22 июня 2018

Включите 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 будет включен, как и любая другая сборка. Однако это наименее инвазивное решение, которое мы нашли, которое позволило нам контролировать версию Newtonsoft.Json.dll, включенную в пакет vsix, а также не полагаться на версию, найденную в C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\PrivateAssemblies.

...