为什么我在安装VS2012/.Net 4.5后在.Net 4.0 Assembly.GetCustomAttributes上得到ExecutionEngineException?

mck*_*ral 7 .net c# system.reflection .net-assembly visual-studio-2012

真的很简单.我已经将.Net 2-3.5的解决方案升级到.Net 4,它工作正常,我已经安装了VS 2012并使用它.Net 4.5我现在在尝试反映来自一个CustomAttributes时遇到ExecutionEngineException使用以下代码动态生成DLL:

Assembly assembly = Assembly.LoadWithPartialName("DavesNamespace.Custom");
var attributes = assembly.GetCustomAttributes(typeof(ChecksumAttribute), true);
Run Code Online (Sandbox Code Playgroud)

我得到了有或没有为GetCustomAttributes指定的Type的异常,但只是在那一点上它抛出异常,程序集成功加载,如果我坚持一个断点,我实际上可以查看CustomAttributes集合.

自安装vs2012以来,最初的.Net 2-3.5版本仍然有效.

任何帮助非常感谢,我发现一些问题源自vs2012以ExecutionEngineExceptions在线查看,但没有答案.这个问题可以通过删除VS2012和.Net 4.5来解决,但是因为我们打算在它发布时转移到VS2013公司,这不是真正的解决方案.

编辑:在示例应用程序中出现错误,即使应用程序是针对4.5构建的,仍然会抛出异常

堆栈跟踪在下面的评论中添加(它为空)

mck*_*ral 1

我已经针对我们的特定情况解决了这个问题,尽管我认为根源是 .Net 4.5 如何读取 DLL 上的 CustomAttributes 的未记录的更改。

解决方案是将要设置的CustomAttributeBuilderAssemblyBuilder.Save()从[填充程序集的所有内容之后] 之前的最后一件事移动到第一个thing after AppDomain.CurrentDomain.DefineDynamicAssembly()[在填充任何内容之前]

抛出异常的实际代码不需要更改,尽管我已经重构以使用替换,但LoadWithPartialName()这个Load(),解决方法仍然有效LoadWithPartialName()

可能是在程序集内容之后添加自定义属性将自定义属性放在了错误的位置?但该问题已由 MS 记录以进行调查。