7

真的像标题一样简单。我已经将解决​​方案从 .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 集合。

安装 vs2012 后,原始 .Net 2-3.5 版本仍然有效。

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

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

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

4

1 回答 1

1

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

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

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

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

于 2013-07-30T07:57:58.900 回答