如何确保OpenXml程序集不会与SpreadsheetLight发生冲突?

问题描述 投票:0回答:4

我 Nugot SpreadsheetLight。为了随后使用它,我需要添加以下用法:

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Spreadsheet;
using SpreadsheetLight;

为了识别前两个(“DocumentFormat”),我还需要 NuGet Microsoft 的“Open XML Format SDK”

我得到了最新版本,2.5

然而,即便如此,我还是收到了一条关于需要引用它的错误消息:

类型“DocumentFormat.OpenXml.Spreadsheet.InlineString”是在未引用的程序集中定义的。您必须添加对程序集“DocumentFormat.OpenXml,Version=2.0.5022.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”的引用。

这行 SpreadsheetLight 代码引发了该消息:

sl.SetCellValue("A1", true); // "sl" is an SLDocument

因此,我从项目中删除了 NuGot(版本 2.6.0.0,运行时版本 v4.0.30319)的引用,然后通过浏览到 C:\Program Files(x86)\Open XML SDK\V2 添加回引用.0\lib 并选择“DocumentFormat.OpenXml.dll”

然后我收到编译器警告:

发现同一依赖程序集的不同版本之间存在冲突。请在项目文件中将“AutoGenerateBindingRedirects”属性设置为 true。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=294190

我注意到我从文件系统添加的 DLL 版本是 2.5.5631.0,而 NuGot 并作为参考安装的版本是 2.6.0.0 运行时版本也不同(安装了 v4.0.30319)通过NuGetting“Open XML Format SDK”,但是我手动添加的DLL的版本是2.5.5631.0,运行时版本v4.0.30319

根据this,我认为我应该通过将

<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
更改为true来编辑.csproj文件 - 但 AutoGenerateBindingRedirects 在那里不存在。

我不知道是否应该添加它,如果应该添加(在哪个“块”中)。我更喜欢谨慎行事并安抚警告引擎。如何确保 OpenXml 程序集不会导致冲突?

nuget openxml openxml-sdk csproj spreadsheetlight
4个回答
5
投票

缓解该警告(使其消失)只需将 DocumentFormat.OpenXML 版本降级到版本 2.0.5022.0(运行时版本 v2.0.50727)

我发现了这一点,因为这段代码来自“Hello World”示例这里

SLDocument sl = new SLDocument();
sl.SetCellValue("A1", true);
. . .

...第一行失败,“无法加载文件或程序集 'DocumentFormat.OpenXml,Version=2.0.5022.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35' 或其依赖项之一

因此,由于它期待 2.0 版本,因此我删除了该文件的 2.5.5631.0,然后用 NuGot“OpenXML SDK 2.0”代替。即版本 2.0.5022.0 和运行时版本 v2.0.50727

所以:毕竟不需要使用神秘的布尔属性来更新项目文件。

不过,这让我不得不使用旧版本的程序集。

更新

在此处证实了使用 DocumentFormat.OpenXml 进行“复古”的必要性。


4
投票
可以通过将

DocumentFormat.OpenXml

 从版本 2.0.5022.0 重定向到更新版本(例如版本 
2.5.5631.0
)来解决该问题。为此,应添加新的 
web.config
 项目:
<dependentAssembly>

Spreadsheetlight 自版本 3.4.5 起可与 DocumentFormat.OpenXml 2.5 配合使用:

3
投票
“版本3.4.5 - SmartTags 现在已不再考虑(现在不那么聪明了,是吗?;)。这意味着代码现已准备好用于 Open XML SDK 2.5!是的,它现在可以与 Open XML SDK 2.5 配合使用(我有提到过吗?哈哈)”

引用自:

https://www.nuget.org/packages/SpreadsheetLight/

截至 2023 年,这个问题似乎已通过 SpreadsheetLight 3.5.0 和 DocumentFormat.OpenXml 2.20.0 得到解决

0
投票

编辑:编译时,它会生成损坏的 .XLSX 文件。返回 DocumentFormat.OpenXml 2.5.0!

编辑2:在我重新创建所有Excel模板后,SpreadsheetLight 3.5.0和DocumentFormat.OpenXml 2.20似乎对我来说工作得很好(不知道为什么,但在最新版本的Excel中重新创建它们使它们工作)

© www.soinside.com 2019 - 2024. All rights reserved.