Как запросить требуемую версию фреймворка .NET сборки (не CLR)? - PullRequest
2 голосов
/ 21 мая 2010

мы используем какую-то подключаемую архитектуру в одном из наших продуктов (на основе .NET). Мы должны учитывать наших клиентов или даже третьих лиц разработчики пишут плагины для продукта. Плагины будут .NET сборки, которые загружаются нашим продуктом во время выполнения. У нас нет контроль качества или возможностей внешних плагинов (кроме проверки, реализуют ли они правильные интерфейсы).

Таким образом, нам нужно реализовать какую-то проверку безопасности при загрузке плагины, чтобы убедиться, что наш продукт (и среда размещения) может фактически разместить плагин или доставить осмысленное сообщение об ошибке ("Плагин для вашей загрузки. NET версия 42.42 - хостинг Система только на версии 33.33. ").

В идеале плагины будут делать эту проверку внутри, но наши опыт относительно их компетентности так себе и в любом случае наш Виноват продукт, поэтому мы хотим убедиться, что это «просто работает». Требование от разработчиков плагинов предоставить информацию в метаданных или явно предоставить информацию в интерфейсе считается «слишком сложным».

Я знаю о свойстве Assembly.ImageRuntimeVersion. Но к моему знание этого говорит мне только необходимую версию CLR, а не структуру версия. И я не хочу проверять все зависимости сборки и сопоставить их с таблицей «фреймворк версии против доступных сборки».

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

мода

Спасибо и всего наилучшего, Бон

Ответы [ 2 ]

1 голос
/ 21 мая 2010

Версия CLR - это версия платформы .NET. .NET 3.0, 3.5 и 3.5 SP1 отличаются только тем, что добавляет сборки в исходный набор 2.0. Соответственно, базовые сборки для 3.5 SP1 по-прежнему имеют 2.0.0.0 [AssemblyVersion]. Вы можете увидеть это в диалоговом окне Добавить ссылку.

1 голос
/ 21 мая 2010

Я действительно не думаю, что это можно сделать. Я изучал это, и многие другие люди задавали тот же вопрос, например:

http://www.developersdex.com/csharp/message.asp?p=1111&r=6905306

Для каждого вопроса ответ кажется одинаковым - вам нужно будет выполнить итерацию по ссылочным сборкам целевой сборки и проанализировать их, чтобы определить, какая версия .NET Framework используется.

EDIT:

Не уверен, поможет ли это, но вы можете использовать что-то вроде этого:

static void Main()
        {
            var g = Assembly.GetExecutingAssembly().GetReferencedAssemblies();

            foreach (AssemblyName assemblyName in g)
            {
                Console.WriteLine(assemblyName.FullName);
                Console.WriteLine(assemblyName.Version);

            }
        }

Таким образом, вы можете перебирать ссылочную сборку сторонней сборки, отыскивая mscorlib и проверяя его версию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...