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

C# 如何在Mono2.10上包含DocumentFormat.OpenXml.dll的引用?,c#,mono,openxml-sdk,moma,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\Do

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


请指导我解决此问题…

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

如果您正在开发ASP.NET应用程序,则需要将DocumentFormat.OpenXML.dll与应用程序放在同一文件夹中,或者放在“bin”路径中。但是,我不确定OpenXMLSDK是否在非Windows操作系统上受支持—您可能需要研究第三方解决方案


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

选择“引用”下的DocumentFormat.OpenXml,查看其属性,并将“复制本地”选项设置为True,以便将其复制到输出文件夹。这对我很管用

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

我本人对此并不熟悉,下面是我所做的:

我正在使用MS Visual Studio 2010 Pro

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

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

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

    对我有效的方法:

  • 将文件夹添加到项目中,称之为第三方
  • ThirdParty
    文件夹中添加
    DocumentFormat.OpenXML.dll
    WindowsBase.dll
  • 确保项目使用
    ThirdParty
    dir作为两个DLL的参考
  • 生成并发布到外部服务器

  • 转到Nuget软件包管理器,搜索openxml。并安装DocumentFormat.openxml。我发现,当与PCL库混合使用时,出现了上述问题,虽然WindowsBase库确实包含System.IO.Packaging,但我使用的是OpenXMLSDK MOT 2.6.0.0库,该库本身提供了自己的physi文件副本cal System.IO.Packaging library。我缺少的参考可以在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>
    
    
    ..\..\..\..\packages\OpenXMLSDK MOT.2.6.0.0\lib\System.IO.Packaging.dll
    真的
    

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

    我的问题是全局汇编缓存(GAC)中存在
    DocumentFormat.OpenXml.dll
    因此,当在VS2013中发布我的项目时,它在GAC中找到了该文件,因此在复制到发布文件夹时忽略了该文件

    解决方案:从GAC中删除DLL

  • 在Windows资源管理器中打开GAC根目录(Win7:
    %windir%\Microsoft.NET\assembly
  • 搜索
    OpenXml
  • 删除任何适当的文件夹(或者为了安全起见,将它们剪切到桌面上,以防您需要恢复它们)
  • 也许有一种更合适的方法来删除GAC文件(见下文),但这就是我所做的,而且它起到了作用。
    gacutil–u DocumentFormat.OpenXml.dll


    希望有帮助!

    我已经在C#Net(4.0)中设置了WindowsBase的参考通过project explorer窗口。但在我无法解决该问题之前…我下一步要做什么?如果解决方案中有多个项目,请尝试将其包含到其他项目中。可能是您包含到了错误的项目中。我没有指定
    System.IO.Packaging
    这很奇怪,用户会出现运行时错误。当您开始如果要在cod中使用像
    SpreadsheetDocument
    这样的类,编译器本身就会开始给出错误。在运行时,它应该从全局程序集缓存(GAC)中选择
    WindowsBase.dll
    .Net Framework的。我已在VisualStudio 2017网站项目中成功使用此解决方案。目前,我将.Net引用程序集从\Program Files(x86)\reference assembly\Microsoft\Framework\.NETFramework\.dll复制到我网站的/bin文件夹。