如何在Mono2.10上包含DocumentFormat.OpenXml.dll的引用?

时间:2011-03-10 10:29:32

标签: c# mono openxml-sdk moma

我正在使用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放在同一个地方进行测试...

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

10 个答案:

答案 0 :(得分:21)

您还应确保设置对WindowsBase的引用。这需要在处理System.IO.Packaging时使用SDK(用于解压缩并打开压缩的.docx / .xlsx / .pptx作为OPC文档)。

答案 1 :(得分:18)

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

我正在使用MS Visual Studio 2010 Pro。

  1. 下载并安装OpenXML SDK
  2. 在我的Visual Studio项目中,选择“Project”,然后选择“Add Reference”
  3. 选择“浏览”标签
  4. 在“查找范围:”下拉菜单中,导航至: C:\ Program Files(x86)\ Open XML SDK \ V2.0 \ lib并选择“DocumentFormat.OpenXml.dll
  5. 点击确定
  6. 在“解决方案资源管理器”(右侧为我)中,“References”文件夹现在显示DocumentFormat.OpenXML库。
  7. 右键单击它并选择“属性”
  8. 在“属性”面板中,将“复制本地”更改为“True”。
  9. 现在应该使用DocumentFormat类关闭并运行。

答案 2 :(得分:7)

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

答案 3 :(得分:6)

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

答案 4 :(得分:3)

对我有用的是什么:

  1. 在项目中添加一个文件夹,称之为ThirdParty
  2. ThirdParty文件夹中添加DocumentFormat.OpenXML.dllWindowsBase.dll
  3. 确保项目使用ThirdParty目录作为两个DLL的参考
  4. 构建并发布到外部服务器。

答案 5 :(得分:1)

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

我发现当与PCL库混合时,上面的问题就出现了,虽然WindowsBase库确实包含System.IO.Packaging我使用的是OpenXMLSDK-MOT 2.6.0.0库,它本身提供了自己的副本物理System.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

答案 9 :(得分:0)

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

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

  1. 在Windows资源管理器中打开GAC根目录(Win7:%windir%\Microsoft.NET\assembly
  2. 搜索OpenXml
  3. 删除所有相应的文件夹(或者为了安全起见,将其剪切到桌面以防您想要恢复它们)
  4. 可能有更合适的方法来删除GAC文件(如下所示),但这就是我所做的并且有效。 gacutil –u DocumentFormat.OpenXml.dll

    希望有所帮助!