Я занимаюсь разработкой веб-приложения .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?
У вас есть предложения, как решить эту проблему?