【发布时间】:2010-10-28 14:39:52
【问题描述】:
我正在尝试在安全服务器上部署网站,但我遇到了反射问题。 我想这与安全有关,但我不太确定。
在做Assembly.GetTypes()时出错
ReflectionTypeLoadException:无法加载一种或多种请求的类型。检索 LoaderExceptions 属性以获取更多信息。] System.Reflection.Module._GetTypesInternal(StackCrawlMark& stackMark) +0 System.Reflection.Assembly.GetTypes() +105如果我只是忽略这些异常并继续从程序集中加载,则不会加载任何内容。似乎我根本不允许对任何程序集执行此操作。当我在不安全的网络服务器中运行时,一切正常。我对 IIS、mvc 或 .net 安全策略了解不多,因此我们将不胜感激任何正确方向的帮助。
这是导致异常的代码:
private static IEnumerable<IModule> GetModules()
{
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
foreach (var type in assembly.GetTypes()) // <--- This one throws
{
var moduleType = type.GetInterface(typeof(IModule).Name);
if (moduleType != null)
{
IModule module = null;
try
{
module = (IModule)Activator.CreateInstance(type, null);
}
catch (ReflectionTypeLoadException ex)
{
// GetInterface() get's all interfaces with the same
// name, so we'll just skip those who isn't ours
logger.Warn("Could not load module", ex);
}
if( module != null)
yield return module;
}
}
}
}
【问题讨论】:
-
检查以确保您没有加载任何动态程序集。我在使用 MVC 和动态程序集时遇到了类似的问题,但我不确定它是否相同。
-
您能定义“安全服务器”和“非安全服务器”的含义吗?您是指信任级别、HTTP / HTTPS 还是其他? (我假设您正在谈论基于您的错误的信任级别,但只是想确认一下。)此外,异常消息告诉您查看异常对象的 LoaderExceptions 属性。请张贴。您还可以通过异常对象的 Types 属性查看成功加载的类型。
-
@Levi:我想的是 HTTP/HTTPS。我不确定如何查看 LoaderException,因为我没有在该计算机上安装 VS..
标签: asp.net-mvc-2 iis-6 https