Не разрешено использовать отражение в asp.net mvc2 на безопасном сервере? - PullRequest
1 голос
/ 28 октября 2010

Я пытаюсь развернуть веб-сайт на безопасном сервере, но у меня проблемы с отражением.Я думаю, это как-то связано с безопасностью, но я не совсем уверен.

Ошибка возникает при выполнении 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;
            }
        }
    }
}

1 Ответ

1 голос
/ 29 октября 2010

Я нашел ошибку. Это никак не связано с HTTP / HTTPS.

Этот пост помог мне на треке http://forums.asp.net/t/1196710.aspx

Некоторые сборки в зависимом модуле не были скопированы в выходную папку. Моя машина для разработки и тестовый сервер имеют их в GAC, поэтому там все работает.

Я добавил эти компоненты явно, и теперь все работает.

Спасибо за ваше время

...