如何检查程序集上的InternalsVisibleTo属性?

时间:2015-02-24 15:42:19

标签: c# .net-assembly castle ilmerge

我已经使用ILMerge合并了一个本身与Castle.DynamicProxy合并的辅助程序集,并将大多数(如果不是全部)正常公开的Castle类型设置为内部。当我使用依赖于Castle类型的辅助程序集中的代码时,我得到一个TypeLoadException,表示访问被拒绝。

检查的第一步是我的合并程序集仍然为DynamicProxy2程序集设置了InternalsVisibleTo属性。有什么方法可以检查吗?

2 个答案:

答案 0 :(得分:2)

假设您可以加载程序集本身,可以使用Assembly.GetCustomAttributes

var asm = ...;
var internals = asm.GetCustomAttributes(typeof(InternalsVisibleToAttribute),
                                        false);
var foundDynamicProxy2 = internals.Cast<InternalsVisibleToAttribute>()
                                  .Any(x => x.AssemblyName == "DynamicProxy2");

答案 1 :(得分:2)

DotPeek通过双击程序集来显示此信息。 [assembly: InternalsVisibleTo(...)]应该可以看到零次或多次。

此外,Ildasm应该可以通过双击程序集的MANIFEST告诉您这一点。黄色弹出窗口显示以.custom instance void [mscorlib]System.Runtime.CompilerServices.InternalsVisibleToAttribute开头的行。