如何检查程序集上的 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
.
开头的行
我已经使用 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
.