【问题标题】:Why am I getting ExecutionEngineException on .Net 4.0 Assembly.GetCustomAttributes after installing VS2012/.Net 4.5?安装 VS2012/.Net 4.5 后,为什么在 .Net 4.0 Assembly.GetCustomAttributes 上出现 ExecutionEngineException?
【发布时间】:2013-07-23 15:14:15
【问题描述】:

真的像标题一样简单。 我已经将解决​​方案从 .Net 2-3.5 升级到 .Net 4,它运行良好,然后我安装了 VS 2012 和它的 .Net 4.5,我现在在尝试从使用以下代码动态生成 DLL:

Assembly assembly = Assembly.LoadWithPartialName("DavesNamespace.Custom");
var attributes = assembly.GetCustomAttributes(typeof(ChecksumAttribute), true);

无论有没有为 GetCustomAttributes 指定的类型,我都会收到异常,但它只是在那个时候引发异常,程序集已成功加载,如果我插入断点,我实际上可以查看 CustomAttributes 集合。

原来的.Net 2-3.5版本在安装vs2012后仍然可以使用。

非常感谢任何帮助,我发现了一些源自 vs2012 的问题,以 ExecutionEngineExceptions 结尾,在网上查找,但没有任何答案。 该问题可以通过删除 VS2012 和 .Net 4.5 来解决,但由于我们打算在 VS2013 发布后在全公司范围内迁移,因此这并不是真正的解决方案。

编辑: 在执行此操作的示例应用程序中出现错误,即使应用程序是针对 4.5 构建的,仍然会引发异常

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

【问题讨论】:

  • 你能发布异常和堆栈跟踪吗?
  • @mckjerral 我来自 .NET Framework 兼容性团队。我想看看这个问题。您可以通过 Microsoft dot com 的 netfx45compat 与我联系吗?如果您有重现该问题的代码,那也很棒。谢谢,瓦伦
  • @jessehouwing {"Exception of type 'System.ExecutionEngineException' was thrown."} HRESULT -2146233082 StackTrace null 那里没有太多帮助!
  • @mckjerral 和所有对这篇文章投票的人:我来自 Microsoft .NET Framework Compatibility 团队。我想了解您的应用如何受到此问题的影响。您能通过 Microsoft dot com 的 netfx45compat 与我联系吗?谢谢!
  • @Varun 我给那个地址发了电子邮件但没有回复。我现在正在回复你发给我的电子邮件。

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


【解决方案1】:

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

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

引发异常的实际代码不需要更改,尽管我已经重构为使用 LoadWithPartialName() 的替换,这只是 Load(), 这种解决方法仍然适用于 LoadWithPartialName()

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 2012-10-12
    • 1970-01-01
    相关资源
    最近更新 更多