【发布时间】:2018-05-15 13:05:21
【问题描述】:
我正在开发一个依赖于 XSLT 2.0 的 .NET Web 应用程序,而来自 Saxonica 的 Saxon-HE NuGet(版本 9.8.0.12 - 撰写本文时最新)用于转换,因为 .NET 支持目前只有 XSLT 1.0 (.NET Framework 4.7.1)。
当使用ASP.NET Core Application 以.NET Framework 为目标并尝试实例化Saxon.Api.Processor 时,我得到一个运行时System.IO.FileNotFoundException 说:
“无法加载文件或程序集 'saxon9he' (...) 系统找不到指定的文件。”
\bin 文件夹中实际上缺少必要的 .dll。我查看了位于 \Users\MyUser\.nuget\packages\saxon-he\version-number 的 Saxon-HE nuget 的 .nuspec 文件,它缺少对所有必要库的引用(或依赖项),只有对 saxon9he-api.dll 的引用存在。
<references>
<reference file="saxon9he-api.dll" />
</references>
在调查 nuget 的 \lib 文件夹时,我发现 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>
现在 Saxon 的处理器实例化没有错误。问题是这并不好,因为 NuGet 更新会阻止它,并且它不会在其他没有编辑 .nuspec 文件的机器上工作(而且首先不应该这样做)。
但是,当在ASP.NET Web Application (.NET Framework) 中执行相同操作时,Saxon 会按预期工作并找到依赖项。这里的不同之处在于 NuGet 包保存在解决方案文件夹中,我猜引用的解析方式不同。
是我做错了什么,还是一个坏的 NuGet 包? 有没有办法判断 NuGet 包是否支持 .NET Core 项目? 您对如何解决这个问题有什么建议吗?
【问题讨论】:
-
经过更多研究,我在 Saxon 问题跟踪器上发现,在 2016-08-10 向 Saxon 团队提出了同样的问题; saxonica.plan.io/issues/2873>。原来我说的NuGet package不是Saxonica生产的。他们说他们应该自己发布官方 NuGet 包,但没有迹象表明这实际上会发生。
-
有关如何检查 NuGet 包是否适用于 .NET Core 的一般性问题,请参阅 docs.microsoft.com/en-us/dotnet/core/porting/third-party-deps。
标签: c# asp.net-core nuget saxon