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

B. *_*non 6 csproj openxml openxml-sdk nuget spreadsheetlight

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

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Spreadsheet;
using SpreadsheetLight;
Run Code Online (Sandbox Code Playgroud)

为了识别前两个(“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
Run Code Online (Sandbox Code Playgroud)

因此,我从我的项目中删除了我拥有 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 安装作为参考的那个 DLL 是 2.6.0.0 版本,运行时版本也不同(v4.0.30319 是由NuGetting“Open XML Format SDK”,但是我手动添加的DLL版本是2.5.5631.0,Runtime Version v4.0.30319

根据这个,我得知我应该改变编辑的.csproj文件<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>为真-但AutoGenerateBindingRedirects不存在那里。

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

B. *_*non 5

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

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

SLDocument sl = new SLDocument();
sl.SetCellValue("A1", true);
. . .
Run Code Online (Sandbox Code Playgroud)

...在第一行失败,“无法加载文件或程序集 '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 来“复古”的需要。

  • 我昨天正在与这个搏斗。我确实尝试了几个不同的版本,所以我认为你的答案实际上是正确的——降级到非最新版本。但是,直到我也修改了我的 app.config 文件,它才对我有用。它有一个将 DocumentFormat.OpenXml 版本 0.0.0.0-2.5.5631.0 映射到 2.5.5631.0 的dependentAssembly 元素。我认为这是由我所做的各种 nuget 操作之一添加的。删除该元素后,我的代码就可以工作了。(顺便说一句,fantods、nugot 和 assuaging 是很棒的词!) (2认同)