Ссылки, не разрешенные для пакета Saxon Nuget в ASP.NET Core Application - PullRequest
0 голосов
/ 15 мая 2018

Я занимаюсь разработкой веб-приложения .NET, использующего XSLT 2.0 и, в свою очередь, Saxon-HE NuGet (версия 9.8.0.12 - последняя на момент написания этой статьи) из Saxonica. используется для преобразований, потому что .NET на данный момент поддерживает только XSLT 1.0 (.NET Framework 4.7.1).

При работе с ASP.NET Core Application нацеленным на .NET Framework и попыткой создания экземпляра Saxon.Api.Processor, я получаю время выполнения System.IO.FileNotFoundException, говорящее:

"Не удалось загрузить файл или сборку 'saxon9he' (...) Системе не удалось найти указанный файл."

Необходимый .dll фактически отсутствует в папке \bin. Я посмотрел на .nuspec файл для Saxon-HE nuget, который находится в \Users\MyUser\.nuget\packages\saxon-he\version-number и в нем отсутствуют ссылки (или зависимости) на все необходимые библиотеки, присутствует только ссылка на saxon9he-api.dll.

<references>
    <reference file="saxon9he-api.dll" />
</references>

При исследовании папки \lib nuget я обнаружил, что для пакета NuGet требуются и saxon9he.dll, и IKVM dll. Поэтому я отредактировал файл .nuspec и добавил туда отсутствующие ссылки.

<references>
  <reference file="saxon9he-api.dll" />
  <reference file="saxon9he.dll" />
  <reference file="IKVM.Runtime.dll" />
  <reference file="IKVM.OpenJDK.XML.API.dll" />
  <reference file="IKVM.OpenJDK.Util.dll" />
  <reference file="IKVM.OpenJDK.Text.dll" />
  <reference file="IKVM.OpenJDK.Core.dll" />
  <reference file="IKVM.OpenJDK.Charsets.dll" />
</references>

А теперь саксонский процессор создан без ошибок. Проблема в том, что это не очень хорошо, потому что обновления NuGet будут тормозить его, и он не будет работать на других машинах, которые не редактировали файл .nuspec (и это не следует делать в первую очередь).

Однако, когда вы делаете то же самое в ASP.NET Web Application (.NET Framework) Saxon работает как положено, и обнаруживаются зависимости. Разница здесь в том, что пакеты NuGet хранятся в папке решения, и я думаю, что ссылки разрешаются по-разному.

Я что-то делаю не так или это плохой пакет NuGet? Есть ли способ узнать, поддерживает ли пакет NuGet .NET Core Projects? У вас есть предложения, как решить эту проблему?

1 Ответ

0 голосов
/ 18 мая 2018

После дальнейших исследований я обнаружил на трекере саксонских проблем, что этот же вопрос был задан саксонской команде 2016-08-10;;.Оказывается, что пакет NuGet, о котором я говорил, не был произведен Saxonica.Они говорят, что должны выпустить официальный пакет NuGet самостоятельно, но нет никаких признаков того, что это действительно произойдет.

Как указал Мартин Хоннен , здесь приведены инструкции о том, как определить, является ли NuGetПакет совместим с .NET Core - https://docs.microsoft.com/en-us/dotnet/core/porting/third-party-deps.

...