5

我在这里遇到了同样的问题:ASP.NET MVC 应用程序中的“Bad binary signature”

ASP.Net MVC 站点在本地计算机上运行良好,但是当使用 aspnet_compiler、aspnet_merge 和 msdeploy 的组合进行部署时,加载任何页面都会失败并出现以下错误:

System.BadImageFormatException 错误的二进制签名。(来自 HRESULT 的异常:0x80131192)

链接问题中接受的解决方案表明该问题是由使用错误版本的 aspnet_merge 引起的,并且我已验证从部署中删除 aspnet_merge 步骤可以解决该问题。

我的问题是使用正确的 aspnet_merge 版本似乎无法解决问题。

Web 应用程序的目标是 .Net 4.0 64 位。使用的 aspnet_merge 路径是:“C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\aspnet_merge.exe”

[编辑]

本地开发是:

  • VS2010 SP1
  • 卡西尼
  • x64
  • 已安装 VS11 Beta 和 .Net 4.5

构建路径是:

  • C:\Windows\Microsoft.NET\Framework\v4.0.30319\
  • C:\Program 文件 (x86)\IIS\Microsoft Web 部署 V2\
4

2 回答 2

2

我也遇到过类似的问题,使用 Web 部署项目在 VS2010 (.NET 4.0) 中预编译 ASP.NET 网站项目。

一切正常,直到我安装了 VS2012(它安装了 .NET 4.5 - 我认为这是相关的),它开始给我:

System.BadImageFormatException: Bad binary signature. (Exception from HRESULT: 0x80131192)

在一些调试和隔离测试用例之后,我将问题追溯到 .NET 4.0 网站和另一个 .NET 3.5 项目之间传递的 lambda。

3.5 项目中定义的方法有这样的签名:

public IEnumberable<T> ExecuteAsEnumerable(Func<IDataReader, T> func)
{
  //..
}

它在 4.0 网站中的属性 getter 中使用,导致通过 aspnet_merge 合并时出现错误:

public IList<MyObject> MyListOfItems
{
  get
  { 
    return _myListOfItems ?? (_myListOfItems = new SomeQueryBuilder()
      //.build statement
      .ExecuteAsEnumerable(reader => new MyObject(reader))
      .ToArray());
  }
}

在我的测试用例中,我ExecuteAsEnumerable在 4.0 网站内重新创建了一个不同的命名扩展方法,经过预编译,它可以工作。在检查了项目的“Target .NET Framework”并意识到它是3.5(我之前没有意识到)之后,我将所有东西都切换到了4.0,一切都恢复了。

.NET 4.5 更新中明显发生了一些变化(这是对 4.0 的就地升级)。就我而言,我可以重新编译有问题的项目——我不确定每个人都会有这种奢侈(这是正确的词吗?)。

希望有帮助。

于 2012-12-04T11:37:28.730 回答
0

我也遇到了这个异常。据我所知,这也不是 aspnet_merge 版本问题,也不是目标框架的问题。然而,它是在一个最近更新到 MVC 5 的旧项目上。

我在 Razor 视图中有这段代码:

var companies = users.Select(u => u.Company).DistinctBy(c => c.Id)
                             .OrderBy(c => c.Id == CurrentUser.Company.Id ? 0 : 1)
                             .ThenBy(c => c.Name);

它使用 Linq 和DistinctBy用于 MoreLinq 库。由于无论如何这都不应该出现在视图中,因此我将其移至控制器并且异常消失了。

于 2015-02-05T15:48:30.960 回答