【问题标题】:Could not load file or assembly 'DocumentFormat.OpenXml无法加载文件或程序集“DocumentFormat.OpenXml”
【发布时间】:2014-10-08 01:29:15
【问题描述】:

我不断收到此错误是 VS2013

Could not load file or assembly 'DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。

在我的 web.config

    <?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
    <connectionStrings>
        <add name="hjkom_med_web_udvConnectionString" connectionString="Data Source=M95;Initial Catalog=hjkom-med_web;Persist Security Info=True;User ID=HJkom-MED_web;Password=bvkeB7hh" providerName="System.Data.SqlClient"/>
    </connectionStrings>
    <system.web>
        <compilation debug="true" targetFramework="4.0">
            <assemblies>
                <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                **<add assembly="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>**

</assemblies></compilation>
    </system.web>
</configuration>

我尝试插入 windowsbase 和许多其他东西。

我一直在寻找解决方案,有人知道如何解决吗?

【问题讨论】:

  • 那么你那个版本的程序集可用吗?
  • 我不太清楚你的意思?这是我可以添加的文件吗?也许它有助于解释它是一个伟大的系统,并且在今天的 IIS 服务器上运行,我正在那里进行大量的更正,当我完成时必须在线。当我想在 VS2013 中运行它时出现错误。
  • 这是一个程序集——它不只是凭空出现的。您需要适当地下载或安装它。老实说,我只是使用 nuget 包......
  • 支持 Jon,检查您是否有尝试包含在 GAC 中的可用版本,当您安装 SDK 时应将其放置在该位置。如果您仍然遇到问题,请尝试使用dependency walker 并查看您是否遗漏了其他内容。您还可以尝试在对 .dll 的引用上设置 Copy Local = true 并查看是否可以解决您的问题。 BTW:我认为还需要引用 System.Xml。
  • Jon- 我试过使用 NuGet 控制台,它说: PM> Install-Package DocumentFormat.OpenXml Install-Package:当前环境没有打开解决方案。在 line:1 char:16 + Install-Package

标签: c# xml web visual-studio-2013 config


【解决方案1】:

我遇到了这个问题,因为我在 localhost 上运行的计算机上安装了新版本的 .dll,而我的服务器正在运行相同 .dll 的旧版本

我刚刚更新了它,之后一切正常。

在您的情况下,安装此microsoft link 中提供的 DocumentFormat.OpenXml 2.5 版

【讨论】:

  • 为我工作。谢谢@Lucas
【解决方案2】:

在撰写此答案时,Open XML SDK 有 3 个版本:

您很可能在您的项目中引用了安装在您机器上的 DLL 版本 2.5。
要获得所需的 v2.0 程序集,我建议您使用我上面提供的 NuGet。

【讨论】:

    【解决方案3】:

    你可以看看这个例子。

    http://www.aspsnippets.com/Articles/Solution-ASPNet-GridView-Export-to-Excel-The-file-you-are-trying-to-open-is-in-a-different-format-than-specified-by-the-file-extension.aspx

    我下载了示例并导入了

    • ClosedXML.dll
    • DocumentFormat.OpenXml.dll

    dlls(realted dlls 已经在项目中。我使用了它们)。之后我的错误消失了。你可以试试..我不知道为什么。但重要的是我的项目现在正在运行..

    【讨论】:

      【解决方案4】:

      最近遇到了同样的问题。

      我在库中引用了 ClosedXML,当我在控制台应用程序中使用该库时,出现缺少引用错误。

      这是因为 DocumentFormat.Excel、ExcelNumberFormat 和 FastMember.Signed 未复制到我的控制台应用程序的输出文件夹中。

      2 个解决方案:

      1) 在客户端(本例中为控制台应用程序项目)中安装 closedXML nuget 包及其所有依赖项。

      2) 要复制 dll,您必须在库中引用它们。 将以下函数添加到库中并从静态构造函数中调用它:

          /// <summary>
          /// This code is here to embeed the following libraries : 
          /// - DocumentFormat.Excel
          /// - ExcelNumberFormat
          /// - FastMember.Signed
          /// </summary>
          private static void EmbeedNeededLibraries()
          {
              Action<Type> noop = _ => { };
              var lib1 = typeof(DocumentFormat.OpenXml.OpenXmlAttribute);
              var lib2 = typeof(ExcelNumberFormat.NumberFormat);
              var lib3 = typeof(FastMember.ObjectAccessor);
              noop(lib1);
              noop(lib2);
              noop(lib3);
          }
      

      【讨论】:

        【解决方案5】:

        在该解决方案中的所有项目中签入 Packages.config 文件。在解决方案中的所有项目中应该相同。供参考

        【讨论】:

          【解决方案6】:

          我的情况是,我的解决方案中的不同项目引用了不同的版本。 VS 的 nuget consolidate 功能在这里帮助了我,因为它不仅可以显示不同的版本,而且还可以轻松更新旧版本(右键单击解决方案>>“管理解决方案的 nuget 包”>>“合并”选项卡)。

          【讨论】:

            【解决方案7】:

            https://docs.telerik.com/reporting/installation-deploying-adomd.net 就我而言,我的项目同时引用了 Telerik.Reporting.OpenXmlRendering 版本;一旦我删除了旧的,这个错误就消失了。

            【讨论】:

              【解决方案8】:

              只是为了添加一个工作解决方案,在我的情况下,我在我的计算机和服务器上工作,引用不存在,然后我添加了一个使用 DLL 引用的文件,但是当我上传到服务器新版本,我只是复制文件,因为我不能做一个“正常的VS部署”,像往常一样,我没有更新web.config......但是......最后这些行不见了:

                <runtime>
                  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
                    <dependentAssembly>
                      <assemblyIdentity name="DocumentFormat.OpenXml" publicKeyToken="8fb06cb64d019a17" culture="neutral" />
                      <bindingRedirect oldVersion="0.0.0.0-2.12.3.0" newVersion="2.12.3.0" />
                    </dependentAssembly>
                    <dependentAssembly>
                      <assemblyIdentity name="System.Drawing.Common" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
                      <bindingRedirect oldVersion="0.0.0.0-4.0.0.2" newVersion="4.0.0.2" />
                    </dependentAssembly>
                  </assemblyBinding>
                </runtime>
              

              也许您不需要“绘图参考”,但 OpenXml 部分成功了,祝您好运!

              【讨论】:

                猜你喜欢
                • 2016-12-23
                • 1970-01-01
                • 2014-12-01
                • 2020-08-17
                相关资源
                最近更新 更多