【问题标题】:Could Not Load File or Assembly - Incorrect Format - Partial Binding无法加载文件或程序集 - 格式不正确 - 部分绑定
【发布时间】:2015-06-16 13:58:33
【问题描述】:

我正在尝试在本地计算机上运行现有解决方案,但每次尝试运行时都会出现以下错误 [下图]。

无法加载程序集“HtmlToPdfBuilder”或其其中之一的文件 依赖项。试图加载不正确的程序 格式'

我不确定它是否相关,但它也提供了有关部分绑定的信息

警告:为程序集提供了部分绑定信息

我找不到 dll “HtmlToPdfBuilder” 的来源,所以我无法检查是否有不同的版本。 我已将我的项目设置为针对“任何 CPU”进行编译,但尝试将其设置为 x64 和 x86,并且我还尝试在 IIS 中将“启用 32 位应用程序”设置为 true 和 False。

dll 位于项目外部的文件夹中并被引用,我尝试将其移动到项目中并引用它(只是以防万一)。

完全相同的项目可以在其他人的机器上运行,我们已经尝试比较,但在设置上看不到任何差异。

我正在运行 Visual Studio 2012,这是一个 VB.NET 项目。

更新

这也在服务器上运行

  • 我已尝试匹配我的 IIS 和网站设置
  • 我已尝试将所有 dll 从服务器复制到本地 机器,但仍然出现同样的错误
  • 我还将所有本地 dll 复制到服务器和站点 那里仍然运行良好
  • 我也匹配了webconfigs,唯一的区别是服务器实体框架设置为Version=4.3.1.0,本地设置为Version=6.0.0.0

【问题讨论】:

    标签: asp.net .net assemblies


    【解决方案1】:

    您似乎正在尝试在 64 位应用程序(或反之亦然)上使用 32 位 dll,所以您应该使用以下内容。

    1. 打开 Visual Studio 命令提示符并键入“corflags [pathTo]/[your assembly]”,这将告诉您架构,以便您可以更改/验证您是否拥有正确的 dll。
    2. 在 Visual Studio 上,转到引用属性并检查它在哪里被检索。然后相应地将刷新路径更改为您的 dll 路径,并将本地副本设置为 true。
    3. 重建并运行。
    4. 如果它也在 IIS 上运行,请将启用 32 位应用程序设置为 true。

    【讨论】:

    • 我试过这个并得到以下结果:版本:v2.0.50727 CLR 头:2.5 PE:PE32 CorFlags:0x3 ILONLY:1 32BITREQ:1 32BITPREF:0 签名:0 我尝试将 32BitReq 更改为 0但这没有任何区别。这是你的意思吗?以前没用过所以不太明白。
    • 那只表示 DLL 是 32 位的。因此,在知道这一点之后,快速修复将只是使用该 dll 的 64 位版本,或者检查所有使用 HtmlToPdfBuilder 的项目和 dll 是否构建在 32 位或任何 CPU 上
    • 我将所有项目都设置为 32 位,这没有任何区别,我不知道 htmltopdfbuilder dll 来自哪里,所以我找不到不同的.. 我不明白这就是为什么它可以在另一台机器上运行!我错过了什么?
    【解决方案2】:

    这是我最终解决此问题的方法:

    • 在命令提示符下重新注册 .net 和 IIS

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319>aspnet_regiis.exe -i

    • 创建了一个新的应用程序池(因为设置太多了)
    • 在应用程序池上设置启用 32 位
    • 重新启动 IIS

    我无法解释为什么会这样,因为在任何其他网站上都没有任何问题,但我想我会分享它以帮助其他人。

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 2010-12-11
      • 2017-09-22
      相关资源
      最近更新 更多