Dan*_*owe 5 asp.net asp.net-mvc 64-bit aspnet-merge
我遇到了此处报告的相同问题:“Bad Binary Signature” in ASP.NET MVC application
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 (.NET 4.0) 中使用 Web 部署项目预编译 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)
{
//..
}
Run Code Online (Sandbox Code Playgroud)
它在 4.0 网站的属性 getter 中使用,导致通过 aspnet_merge 合并时出现错误:
public IList<MyObject> MyListOfItems
{
get
{
return _myListOfItems ?? (_myListOfItems = new SomeQueryBuilder()
//.build statement
.ExecuteAsEnumerable(reader => new MyObject(reader))
.ToArray());
}
}
Run Code Online (Sandbox Code Playgroud)
在我的测试用例中,我ExecuteAsEnumerable在 4.0 网站内重新创建了一个不同的命名扩展方法,并进行了预编译,并且它有效。在检查了项目的“目标 .NET Framework”并意识到它是 3.5(我之前没有意识到)后,我将所有内容切换到 4.0,一切又恢复正常了。
.NET 4.5 更新中明显发生了一些变化(这是对 4.0 的就地升级)。就我而言,我可以重新编译相关项目 - 我不确定每个人都会有这种奢侈(这是正确的词吗?)。
希望有帮助。
| 归档时间: |
|
| 查看次数: |
3697 次 |
| 最近记录: |