【问题标题】:An attempt was made to load an assembly with an incorrect format试图加载格式不正确的程序集
【发布时间】:2012-05-01 23:45:17
【问题描述】:

我同时使用 VS2008VS2010 处理不同的项目。最近我尝试为实体项目生成序列化程序集,但无法通过 Visual Studio 2010 生成相同的程序集。这会引发以下错误:

An attempt was made to load an assembly with an incorrect format: X:\Dev\Proj\X.Entities\bin\Debug\X.entities.dll.

这是我为实体项目设置的构建后事件

"$(FrameworkSDKDir)\Bin\sgen" /nologo /force $(TargetFileName)
copy "$(TargetDir)X.Entities.Serializer.dll" "$(SolutionDir)\X.Site\Bin"

我能够从 VS 2010 命令行生成 Serializer dll。 对于VS2008项目;线路工作正常。但是,错误出现在 VS2010 项目上!

VS2010 有不同的FrameworkSDKDir 变量吗?如果没有,如何修改它以同时用于 VS2010 和 VS2008 项目?

顺便说一句,我使用 win 2008 Server 32 位操作系统,IIS 7 进行开发。

【问题讨论】:

  • VS2010中有4个版本的sgen.exe。 32 位与 64 位以及 CLR 2 与 CLR 4 的组合。我猜您正在获取 .NET 4 版本并尝试将其加载到针对 CLR 2 的项目中。
  • @HansPassant:所有项目都设置为 4.0 框架,因此我不认为它正在尝试加载 CLR 2。即使它指向,我该如何更改?
  • 首先你必须确定问题,然后你可以考虑修复它。使用 ildasm.exe 验证您的假设,它会在清单中显示预期的 CLR 版本。

标签: visual-studio-2010 visual-studio-2008 sgen


【解决方案1】:

您指向的 sgen 用于 CLR 2.0。理想情况下,它将位于 C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin。

在“C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools”下有一个 4.0 版本的 sgen 可以解决这个问题。

您的后期构建命令应该像这样开始:

"$(FrameworkSDKDir)\bin\NETFX 4.0 Tools\sgen"

【讨论】:

    猜你喜欢
    • 2012-11-02
    • 2014-01-11
    • 1970-01-01
    • 2016-05-17
    • 2014-02-10
    • 2015-10-13
    • 1970-01-01
    • 2021-11-11
    • 2019-01-14
    相关资源
    最近更新 更多