6

我 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,Runtime Version v4.0.30319

据此,我收集到我应该通过更改为 true 来编辑 .csproj 文件-<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>但那里不存在 AutoGenerateBindingRedirects。

我不知道我是否应该添加它,如果是的话(在哪个“块”中)。我更喜欢安全地玩它并缓解警告引擎。如何确保 OpenXml 程序集不会引起冲突?

4

3 回答 3

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 进行“复古”的需要。

于 2016-03-22T22:28:32.060 回答
3

可以通过从版本 2.0.5022.0 重定向到更新的版本来解决问题DocumentFormat.OpenXml,例如版本2.5.5631.0。为此,应添加web.config<dependentAssembly>项目:

<configuration>
  ...
  <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         ...
         <dependentAssembly>
            <assemblyIdentity name="DocumentFormat.OpenXml" publicKeyToken="31bf3856ad364e35"/>
            <bindingRedirect oldVersion="1.0.0.0-2.0.5022.0" newVersion="2.5.5631.0"/>
         </dependentAssembly>
      </assemblyBinding>
  </runtime>
  ...
<configuration>
于 2016-04-30T22:18:51.477 回答
2

Spreadsheetlight 从 3.4.5 版开始与 DocumentFormat.OpenXml 2.5 一起使用:

“版本 3.4.5 - SmartTags 现在不再考虑(现在不是那么聪明,是吗?;)。这意味着代码现在可以用于 Open XML SDK 2.5!是的,它现在可以与 Open XML SDK 2.5 一起使用(有我提到过吗?大声笑)”

引用自:https ://www.nuget.org/packages/SpreadsheetLight/

于 2019-01-23T16:22:10.727 回答