Импортированный пакет Nuget надстройки Excel не привязывается к .dll при установке через MSI - PullRequest
0 голосов
/ 05 июля 2018

Мы недавно обновили Newtonsoft.JSON и еще один пакет Nuget, SKGLExtension, для наших надстроек WPF и Excel.

Все наши проекты, на которые есть ссылки, используют пакет nuget Newtonsoft.JSON.dll версии 11.0.0.

И продукты WPF, и Excel ссылаются на DLL-файл движка, который затем ссылается на SKGLExtension, использующий Newtonsoft.JSON.dll.

Когда надстройка Excel установлена ​​через MSI и запущена, мы получаем эту ошибку привязки:

System.IO.FileLoadException: «Не удалось загрузить файл или сборку 'Newtonsoft.Json, версия = 6.0.0.0, культура = нейтральная, PublicKeyToken = 30ad4fe6b2a6aeed 'или одна из его зависимостей. определение манифеста расположенной сборки не соответствует сборке ссылка. (Исключение из HRESULT: 0x80131040) '

=== Pre-bind state information ===
LOG: DisplayName = Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
 (Fully-specified)
LOG: Appbase = file:///C:/Program Files (x86)/Foo/Bar/
LOG: Initial PrivatePath = NULL
Calling assembly : SKM, Version=4.0.3.1, Culture=neutral, PublicKeyToken=30182975912ff1ef.
===
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Foo/Bar/Newtonsoft.Json.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

Из этой строки кода в нашем движке dll:

localKey = SKGL.SKM.LoadKeyInformationFromFile(keyPath, True, False)

Строке предшествует оператор test, вызывающий Newtonsoft.Json.JsonSerializer, который отлично работает.

При запуске из отладки Visual Studio надстройка работает нормально.

Когда проект WPF установлен через MSI, приложение WPF работает нормально.

В папке установки версия Newtonsoft.JSON.dll - 11.0.2.21924. Это то же самое для чистой установки на машине, на которой она никогда не была установлена.

Наш файл Bar.dll.config содержит XML, вставленный процессом установки nuget для перенаправления существующих ссылок:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

В GAC нет ни Newtonsoft, ни SKGLExtension.

Для всех ссылок в нашем коде флаг Require Specific Version установлен в False.

Были очищены как пакеты решения, так и папка пакетов пользователя. Все сборки выполняются как полностью чистые, так и сборки.

Если я попытаюсь скопировать dll из установки WPF в установку Excel, мы все равно получим ту же проблему.

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Я думаю, что это можно решить с помощью нового пакета Nuget, который гарантирует, что SKGLExtesion ссылается на версию Nugets Newtonsoft.Json, а не на локальный пакет, как было ранее.

0 голосов
/ 06 июля 2018

После исчерпания наших опций нам, к сожалению, пришлось удалить ссылку nuget на пакет SKGLExtension. К счастью, нам удалось скомпилировать библиотеку SKGL из исходных кодов для пакета Newtonsoft.Json версии 11, что решило проблему. Было бы неплохо найти лучшее решение, хотя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...