Обнаружение зависимости .NET Framework 3.5 SP1 (cmp. 3.5 без SP1) - PullRequest
5 голосов
/ 24 октября 2008

Я использую 3.5 SP1 на моей машине, в то время как наши клиенты в настоящее время используют 3.5 без SP1. В VS2008 я не знаю способа нацелить решение или проект на 3.5 без SP1, только на 3.5 с SP1, который я установил.

Если мы используем функции или конструкторы, недоступные в 3.5 без SP1, код не будет работать должным образом.

То есть я хочу обнаружить во время компиляции что не будет работать без SP1.

До сих пор мы проводили тестирование (на виртуальной машине или на отдельной машине), чтобы определить, не ломается ли приложение, и иногда оно ломается, когда мы использовали части API, недоступные до SP1. Проблема в том, что он ломается только тогда, когда код действительно выполняется (во время выполнения), а не при загрузке сборки.

Одним из решений было бы иметь компьютер с VS2008 без SP1 и попытаться скомпилировать проект. Однако я бы предпочел, чтобы какой-то инструмент помог мне обнаружить зависимость от 3.5 SP1 (из-за использования нового API или чего-то еще), либо путем анализа исходного кода, либо сборок, которые мы производим.

Мои полномочия Google не были достаточно сильны с этим вопросом, какие-либо подсказки?

Ответы [ 5 ]

5 голосов
/ 24 марта 2009

У меня просто была такая же проблема, и я нашел решение. Для нашего приложения это был вызов System.Threading.WaitHandle.WaitOne (Int32), который доставил нам неприятности. Для получения дополнительной информации о том, как ссылки на API, которые были представлены в выпусках пакетов обновления, могут просочиться в ваш код без уведомления Visual Studio, см. Сообщение Кшиштофа Квалины .

Хорошая новость заключается в том, что, поскольку Марк упомянул свой ответ , FxCop имеет новое правило , которое обнаруживает эти утечки. Плохая новость заключается в том, что правило нарушается в FxCop 1.36, когда вы ориентируетесь на .NET Framework 3.5. Тем не менее, Дэвид Кин описывает, как отредактировать пару файлов конфигурации XML, чтобы исправить проблему . Я следовал инструкциям, и теперь FxCop обнаруживает мои ссылки на API пакета обновления.

2 голосов
/ 24 октября 2008

Как насчет этого ? (многоцелевые правила для FxCop)

1 голос
/ 24 октября 2008

Вы можете использовать найденный код здесь , чтобы обнаружить установленные .NET Frameworks.

0 голосов
/ 24 марта 2009

Есть еще один вариант, который я не пробовал. В документации Visual Studio говорится, что вы можете настроить установщик ClickOnce специально для платформы .NET 3.5SP1. Перейдите по ссылке и выполните поиск «Ориентация на .NET Framework версии 3.5 SP1». По сути, он говорит, что выполнение любого из следующих действий заставит установщик установить 3.5SP1:

  • Укажите URL-адрес ошибки в диалоговом окне «Параметры публикации».
  • Укажите имя пакета в диалоговом окне «Параметры публикации».
  • Создайте ярлык на рабочем столе в диалоговом окне «Параметры публикации».
  • Исключить файл из хэша в диалоговом окне "Файлы приложения".
  • Снимите флажок Подписать манифесты ClickOnce на странице Подписи.
  • Добавить ссылку на сборку System.Data.Entity.
0 голосов
/ 19 декабря 2008

string Fx35RegistryKey = @ "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ v3.5"; object Fx35ServicePack = Registry.GetValue (Fx35RegistryKey, "SP", null);

if (Fx35ServicePack == null || (int) Fx35ServicePack <1) генерировать новое исключение (".NET Framework 3.5 SP1 требуется."); </p>

...