如何确保 OpenXml 程序集不会与 SpreadsheetLight 发生冲突?
How to ensure that the OpenXml assembly doesn't cause a conflict with SpreadsheetLight?
我 Nugot SpreadsheetLight。为了随后使用它,我需要添加以下用法:
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Spreadsheet;
using SpreadsheetLight;
为了识别前两个 ("DocumentFormat"),我还需要微软的 NuGet "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
根据 this,我认为我应该通过将 <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
更改为 true 来编辑 .csproj 文件 - 但那里不存在 AutoGenerateBindingRedirects。
不知道要不要加,如果要加(其中"block")。我更喜欢谨慎行事并安抚警告引擎。如何确保 OpenXml 程序集不会导致冲突?
缓解警告(使其消失在日落中)是将 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
所以:毕竟不需要用神秘的布尔值 属性 更新项目文件。
不过,不得不使用旧版本的程序集让我有点头疼。
更新
"go retro" 与 DocumentFormat.OpenXml 的必要性得到证实 here。
可以通过将 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>
Spreadsheetlight 与 DocumentFormat.OpenXml 2.5 自版本 3.4.5 一起使用:
”版本3.4.5
- 现在不再考虑 SmartTags(现在不是很聪明,是吗?;)。这意味着代码现在已准备好用于 Open XML SDK 2.5!是的,它现在可以与 Open XML SDK 2.5 一起使用(我提到过吗?哈哈)“
我 Nugot SpreadsheetLight。为了随后使用它,我需要添加以下用法:
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Spreadsheet;
using SpreadsheetLight;
为了识别前两个 ("DocumentFormat"),我还需要微软的 NuGet "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
根据 this,我认为我应该通过将 <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
更改为 true 来编辑 .csproj 文件 - 但那里不存在 AutoGenerateBindingRedirects。
不知道要不要加,如果要加(其中"block")。我更喜欢谨慎行事并安抚警告引擎。如何确保 OpenXml 程序集不会导致冲突?
缓解警告(使其消失在日落中)是将 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
所以:毕竟不需要用神秘的布尔值 属性 更新项目文件。
不过,不得不使用旧版本的程序集让我有点头疼。
更新
"go retro" 与 DocumentFormat.OpenXml 的必要性得到证实 here。
可以通过将 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>
Spreadsheetlight 与 DocumentFormat.OpenXml 2.5 自版本 3.4.5 一起使用:
”版本3.4.5 - 现在不再考虑 SmartTags(现在不是很聪明,是吗?;)。这意味着代码现在已准备好用于 Open XML SDK 2.5!是的,它现在可以与 Open XML SDK 2.5 一起使用(我提到过吗?哈哈)“