8

使用 MicrosoftClosedXmlDocumentFormat.OpenXmlNuGet 实用程序包时出现错误。在我更新了这些 NuGet 包(从 2.7.2 版到 2.8.1 版)之后,我现在得到了这个异常:

异常 System.IO.FileLoadException:无法加载文件或程序集“DocumentFormat.OpenXml,Version=2.7.2.0,Culture=neutral,PublicKeyToken=8fb06cb64d019a17”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

当我查看解决方案项目中的相关程序集时,它引用了正确的版本 (2.8.1)。查看 NuGet 包管理器,没有引用旧的 2.7.2 版本(4 个项目引用了新版本 - 2.8.1)。我在任何对版本 2.7.2 的项目引用中都找不到提及。正在执行的应用程序文件夹中的文件也是正确的(2.8.1)(通过查看项目属性窗口的详细信息选项卡)。在我的解决方案中,这个对旧版本号的引用(显然是导致这个异常)的位置可能在哪里?

附加信息:我已经grep对正在执行的应用程序目录中的所有文件(包括二进制文件)进行了检查,包括子目录,并且2.7.2找不到该字符串。

此外,当我在 Visual Studio 中调试它时,它可以正常工作而不会引发异常。但是当我在部署的构建文件夹中运行它时,我得到了 FileLoadException。

4

2 回答 2

2

我刚刚遇到了同样的问题——ClosedXML 0.94.0 和 DocumentFormat.OpenXML 2.10.0。
在开发机器上工作正常,部署到服务器时找不到正确的程序集。我正在使用 .NET 4.7.2
尝试了不同的东西,直到我添加了从 2.7.2 到 2.10.0 的绑定重定向

于 2020-03-01T22:48:48.483 回答
1

包裹有问题。我升级到最近发布的 2.10.0,所有与清单不匹配相关的问题都消失了。

使用来自 Microsoft 的最新稳定版 DocumentFormat.OpenXml.dll 版本 2.10.0 的 nuget 包版本意味着构建输出将仅包含一个 DocumentFormat.OpenXml.dll,它是正确的版本,并且是运行时所需的唯一文件,而不再是 DocumentFormat。 OpenXml.abcdll - 一定要删除它。

2.10.0 仍然支持旧版本的 .NET 框架并在我的情况下通过了所有测试,您的里程可能会有所不同。

于 2020-01-24T13:37:07.110 回答