在ASP.NET MVC应用程序“坏二进制签名”(“Bad binary signature” in

2019-09-18 09:20发布

:我遇到报道了同样的问题在这里在ASP.NET MVC应用程序“坏二进制签名”

在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)的\微软的SDK \的Windows \ v7.0A \ BIN \ NETFX 4.0工具\ aspnet_merge.exe”

[编辑]

本地开发是:

  • VS2010 SP1
  • 卡西尼
  • 64位
  • VS11 Beta版和.NET 4.5的安装

构建路径是:

  • C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \
  • C:\ Program Files文件(x86)的\ IIS \微软Web部署V2 \

Answer 1:

我已经使用Web部署项目预编译VS2010 ASP.NET网站项目(.NET 4.0)也经历了类似的问题。

一切正常,直到我安装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网站内的不同命名的扩展方法,预编译,和它的工作。 检查项目的“目标.NET框架”,并意识到这是3.5(我以前不认识),我切换一切4.0,和一切工作再次。

东西在.NET 4.5的更新(这是一个在就地升级过4.0)发生明显变化。 在我的情况,我可以重新编译项目的问题 - 我不知道每个人都会有这样的奢侈(是正确的字?)。

希望帮助。



Answer 2:

我遇到了这个例外,以及。 这不是一个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库。 由于这不应该是一个视图反正我把它移到控制器和异常消失。



文章来源: “Bad binary signature” in ASP.NET MVC application