33

我正在使用 C#.net Windows 桌面应用程序。我也想在其他平台上运行这些应用程序。所以,我使用 Mono 2.10 作为交叉编译器。在运行时,意外地我的应用程序通过说出错误消息终止,例如

错误:无法打开所选文件夹。
无法加载文件或程序集“DocumentFormat.OpenXml.dll,version=2.0.5022.0,culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。

我不知道这里有什么问题...我已经在 c:\program files\open xml sdk\v2\lib\DocumentFormat.OpenXml.dll 上安装了 openxml sdk2.0。

并将我的应用程序 eXe 放在同一个地方进行测试...

请指导我解决这个问题...

4

10 回答 10

22

我自己是新手,这就是我所做的:

我正在使用 MS Visual Studio 2010 Pro。

  1. 下载并安装 OpenXML SDK
  2. 在我的 Visual Studio 项目中,选择“项目”,然后选择“添加引用”
  3. 选择“浏览”选项卡
  4. 在“查找范围:”下拉菜单中,导航到:C:\Program Files(x86)\Open XML SDK\V2.0\lib 并选择“DocumentFormat.OpenXml.dll
  5. 点击确定
  6. 在“解决方案资源管理器”(我的右侧)中,“参考”文件夹现在显示 DocumentFormat.OpenXML 库。
  7. 右键单击它并选择属性
  8. 在“属性”面板中,将“复制本地”更改为“真”。

您现在应该使用 DocumentFormat 类关闭并运行。

于 2014-06-03T22:25:22.347 回答
21

您还应该确保设置对WindowsBase. 这是使用 SDK 处理的必要条件System.IO.Packaging(用于解压缩和打开压缩的 .docx/.xlsx/.pptx 作为 OPC 文档)。

于 2011-03-10T17:31:44.080 回答
7

在 references 下选择 DocumentFormat.OpenXml,查看其属性,并将 Copy Local 选项设置为 True,以便将其复制到输出文件夹。这对我有用。

于 2013-08-06T20:58:05.577 回答
7

转到 Nuget 包管理器并搜索 openxml。并安装 DocumentFormat.OpenXml

于 2016-01-05T05:44:49.337 回答
3

什么对我有用:

  1. 将文件夹添加到项目中调用它ThirdParty
  2. ThirdParty在文件夹中添加DocumentFormat.OpenXML.dllWindowsBase.dll
  3. 确保项目使用ThirdPartydir 作为两个 DLL 的参考
  4. 构建并发布到外部服务器。
于 2015-06-08T06:56:41.537 回答
1

好吧,在我的应用程序中,我只需要在 .Net 选项卡下添加对“DocumentFormat.OpenXml”的引用,并且始终自动添加两个引用(DocumentFormat.OpenXml 和 WindowsBase)。但它们不包含在 Bin 文件夹中。因此,当应用程序发布到外部服务器时,我总是手动将 DocumentFormat.OpenXml.dll 放在 Bin 文件夹下。或者将引用“复制本地”属性设置为 true。

于 2014-03-03T16:40:15.543 回答
0

您需要将 DocumentFormat.OpenXML.dll 放在与您的应用程序相同的文件夹中 - 如果您正在开发 ASP.NET 应用程序,则需要在“bin”路径中。但是,我不确定非 Windows 操作系统是否支持 OpenXML SDK - 您可能需要查看第三方解决方案。

是的,这个答案是正确的,唯一的区别是您将 .dll 复制到项目的 bin 文件夹中。

于 2013-01-22T16:01:40.873 回答
0

查看并将属性更改为 DocumentFormat.OpenXml 后,我还必须将特定版本更改为 false。

于 2014-09-24T16:18:27.787 回答
0

我发现当与 PCL 库混合时,上述问题会出现,虽然 WindowsBase 库确实包含 System.IO.Packaging,但我使用的是 OpenXMLSDK-MOT 2.6.0.0 库,它本身提供了它自己的物理系统副本.IO.Packaging 库。对我来说缺少的参考可以在 csharp 项目中找到如下

<Reference Include="System.IO.Packaging, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
  <HintPath>..\..\..\..\packages\OpenXMLSDK-MOT.2.6.0.0\lib\System.IO.Packaging.dll</HintPath>
  <Private>True</Private>
</Reference>

我将我的 XMLSDK 版本降级到 2.6,然后似乎为我解决了这个问题。但是可以看到有一个物理程序集 System.IO.Packaging.dll

于 2016-12-23T18:00:26.643 回答
0

对我来说,问题是DocumentFormat.OpenXml.dll存在于我的 Win7 开发盒上的全局程序集缓存 (GAC) 中。因此,在 VS2013 中发布我的项目时,它在 GAC 中找到了该文件,因此将其从复制到发布文件夹中省略了。

解决方案:从 GAC 中删除 DLL。

  1. 在 Windows 资源管理器中打开 GAC 根目录 (Win7: %windir%\Microsoft.NET\assembly)
  2. 搜索OpenXml
  3. 删除任何适当的文件夹(或者为了安全起见,将它们剪切到桌面以防万一您想要恢复它们)

可能有一种更合适的方法来删除 GAC 文件(如下),但这就是我所做的并且它奏效了。 gacutil –u DocumentFormat.OpenXml.dll

希望有帮助!

于 2018-03-13T14:20:29.440 回答