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

时间:2013-07-23 15:14:15

标签: c# .net visual-studio-2012 .net-assembly system.reflection

真的很简单。 我已经将.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);

我得到了带有或没有为GetCustomAttributes指定的Type的异常,但只是在这一点上它抛出异常,程序集已成功加载,如果我坚持使用断点,我实际上可以查看CustomAttributes集合。 / p>

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

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

编辑: 在这样做的示例应用程序中出现错误,即使应用程序是以4.5为目标构建的,也会抛出异常

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

1 个答案:

答案 0 :(得分:1)

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

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

抛出异常的实际代码不需要更改,尽管我已经重构使用LoadWithPartialName()的替换,这只是Load(),此解决方法仍适用于{{1}但是。

在程序集内容之后添加自定义属性可能会将自定义属性放在错误的位置?但是MS会记录这个问题。