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

时间:2016-03-22 21:31:11

标签: nuget openxml openxml-sdk csproj spreadsheetlight

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

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

对于要识别的前两个(" DocumentFormat"),我还需要NuGet Microsoft的#34; Open XML Format SDK"

我得到了最新版本,2.5

然而,即使在那时,我得到了一个关于需要引用它的错误信息:

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

这行SpreadsheetLight代码激发了msg:

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。

我不知道是否应该添加它,如果是的话(其中&#34;阻止&#34;)。我更喜欢安全地玩它并安抚警告引擎。如何确保OpenXml程序集不会引起冲突?

3 个答案:

答案 0 :(得分:4)

确定警告(以便它落入日落)是将DocumentFormat.OpenXML的版本降级到版本2.0.5022.0(运行时版本v2.0.50727)

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

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“复古”的必要性得到了证实here

答案 1 :(得分:2)

可以通过将DocumentFormat.OpenXml从版本2.0.5022.0重定向到更新版本(例如版本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>

答案 2 :(得分:1)

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/