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

How can I check for an InternalsVisibleTo attribute on an assembly?

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

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

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

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

DotPeek 通过双击程序集显示这一点。 [assembly: InternalsVisibleTo(...)] 应该出现零次或多次。

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

开头的行