不允许在安全服务器上运行的asp.net mvc2中使用反射?

发布于 2024-09-29 08:46:18 字数 1454 浏览 1 评论 0原文

我正在尝试在安全服务器上部署网站,但遇到反射问题。 我想这与安全有关,但我不太确定。

执行 Assembly.GetTypes() 时发生错误

ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.]
   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;
            }
        }
    }
}

I'm trying to deploy a web site on a secure server, but I'm having problems with reflection.
I guess this have something to do with security, but I'm not quite sure.

The error occurs when doing Assembly.GetTypes()

ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.]
   System.Reflection.Module._GetTypesInternal(StackCrawlMark& stackMark) +0
   System.Reflection.Assembly.GetTypes() +105

If I just ignore these exceptions and continue to load from assemblies, nothing is loaded. Seems like I'm not allowed to do this for any assemblies at all. When I run in a non secure webserver, everything works ok. I don't know much about IIS, mvc or .net security policies, so any help in the right direction would be greatly appreciated.

Heres the code causing the exception:

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;
            }
        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

峩卟喜欢 2024-10-06 08:46:18

我发现了错误。它与 HTTP/HTTPS 完全无关。

这篇文章帮助我走上正轨http://forums.asp.net/t/1196710.aspx

依赖模块中的某些程序集未复制到输出文件夹。我的开发机器和测试服务器在 GAC 中都有这些,所以一切都在那里。

我明确添加了这些组件,现在一切正常。

感谢您抽出时间

I found the error. It's not related to HTTP/HTTPS at all.

This post helped me on track http://forums.asp.net/t/1196710.aspx

Some assemblies in a dependant module didn't get copied to the output folder. My development machine and the test server has these in GAC, so everything works there.

I added these components explicitly, and now everything works.

Thanks for your time

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文