如何判断.NET程序集是否动态?

Mik*_*ale 44 .net assemblies dynamic

当迭代一组程序集(例如AppDomain.CurrentDomain.GetAssemblies())时,如果您尝试访问CodeBase等属性,动态程序集将抛出NotSuportedException.如何在不触发和捕获NotSupportedException的情况下判断程序集是否是动态的?

Mik*_*ale 43

要检查装配是否是动态的:

if (assembly.ManifestModule is System.Reflection.Emit.ModuleBuilder)
Run Code Online (Sandbox Code Playgroud)

我花了一段时间才弄清楚,所以在这里被问及回答.

更新:

在.NET 4.0中,现在有一个属性:

if (assembly.IsDynamic)
Run Code Online (Sandbox Code Playgroud)

  • 不太正确.模块构建器可以是"非动态的".你应该使用`ModuleBuilder.IsTransient`来检查'动态'. (5认同)

Nic*_*end 22

在.NET 4中,您还可以检查Assembly.IsDynamic属性.