Nuget 如何确保OpenXml程序集不会';是否与电子表格灯发生冲突?

Nuget 如何确保OpenXml程序集不会';是否与电子表格灯发生冲突?,nuget,openxml,openxml-sdk,csproj,spreadsheetlight,Nuget,Openxml,Openxml Sdk,Csproj,Spreadsheetlight,我有电子表格灯。为了随后使用它,我需要添加以下用法: using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Spreadsheet; using SpreadsheetLight; 要识别前两个(“DocumentFormat”),我还需要获取Microsoft的“开放XML格式SDK” 我得到了它的最新版本,2.5 然而,即使在那时,我还是得到了一条关于需要引用它的错误消息: “DocumentFormat.OpenXml.Sp

我有电子表格灯。为了随后使用它,我需要添加以下用法:

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Spreadsheet;
using SpreadsheetLight;
要识别前两个(“DocumentFormat”),我还需要获取Microsoft的“开放XML格式SDK”

我得到了它的最新版本,2.5

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

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

这行电子表格灯代码引发了以下消息:

sl.SetCellValue("A1", true); // "sl" is an SLDocument
因此,我从我的项目中删除了我得到的引用(版本2.6.0.0,运行时版本v4.0.30319),然后通过浏览C:\Program Files(x86)\Open XML SDK\V2.0\lib并选择“DocumentFormat.OpenXml.dll”重新添加了引用

然后我得到一个编译器警告:

发现同一从属程序集的不同版本之间存在冲突。请在项目文件中将“AutoGenerateBindingRedirects”属性设置为true。有关详细信息,请参阅

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

根据,我得出结论,我应该通过将
false
更改为true来编辑.csproj文件-但是那里不存在AutoGenerateBindingRedirects

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

缓和警告(以便它在日落时消失)问题是将DocumentFormat.OpenXML的版本降级为2.0.5022.0版(运行时版本v2.0.50727)

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

…在第一行失败,原因是“无法加载文件或程序集”DocumentFormat.OpenXml,版本=2.0.5022.0,区域性=neutral,PublicKeyToken=31bf3856ad364e35“或其依赖项之一”

因此,由于它的预期版本为2.0,我删除了该文件的2.5.5631.0,然后取而代之的是“OpenXMLSDK2.0”,即版本2.0.5022.0和运行时版本v2.0.50727

因此:毕竟,不需要使用神秘的布尔属性更新项目文件

不过,这让我有点像fantods,不得不使用较旧版本的程序集

更新
证实了使用DocumentFormat.OpenXml“追溯”的必要性。

可以通过将
DocumentFormat.OpenXml
从版本2.0.5022.0重定向到更新的版本,例如版本
2.5.5631.0
。为此,应在
web.config
中添加新的
项:


...
...
...

Spreadsheetlight自3.4.5版起可使用DocumentFormat.OpenXml 2.5:

“3.4.5版 -SmartTags现在不再被考虑(现在不是那么聪明了,是吗?;)。这意味着代码现在可以用于OpenXMLSDK2.5了!是的,它现在可以用于OpenXMLSDK2.5了(我提到过吗?lol)”


引用自:

我昨天一直在努力解决这个问题。我确实尝试了几个不同的版本,所以我认为你的答案是正确的——降级到非最新版本。但是,在我修改app.config文件之前,它对我不起作用。它有一个dependentAssembly元素,将DocumentFormat.OpenXml版本0.0.0-2.5.5631.0映射到2.5.5631.0。我假设它是由我所做的各种nuget操作之一添加的。删除该元素后,我的代码就开始工作了。(顺便说一句,fantods、nuget和assuaging都是很棒的词!)“fantods”来自Twain;我想不起来它是在“Tom Sawyer”还是“Huck Finn”中,或者是在“Tom Sawyer”或“Huck Finn”中,或者两者中都有。遗憾的是,这并不能解决问题:(在生成文件时,它会在某些命令中抛出错误,对我来说,在执行“myExcelFile.SaveAs”()时失败,我找到的唯一解决方案是“go retro”并像B.clay那样使用OpenXML SDK 2.0。@JCO9:你确定你使用了正确的32/64位程序集吗?你到底遇到了什么错误?安装了哪个.Net运行时?你是否尝试使用它来调试问题?问题的原因可能不同。调试并不简单。对于使用NuGet的未来搜索者来说(只升级到SpreadsheetLight v3.4.11),只有DocumentFormat.OpenXml 2.5有效。我尝试了DocumentFormat.OpenXml的所有更高版本,但都失败了,出现了相同的错误。
SLDocument sl = new SLDocument();
sl.SetCellValue("A1", true);
. . .