Вопрос

Я использую на своей машине версию 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 были недостаточно сильны для ответа на этот вопрос, есть подсказки?

Это было полезно?

Решение

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

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

Другие советы

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

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

string Fx35RegistryKey = @ " HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ 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. ");

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

  • Укажите URL-адрес ошибки в диалоговом окне «Параметры публикации».
  • Укажите имя пакета в диалоговом окне «Параметры публикации».
  • Создайте ярлык на рабочем столе в диалоговом окне «Параметры публикации».
  • Исключите файл из хеша в диалоговом окне «Файлы приложения».
  • Снимите флажок «Подписать манифесты ClickOnce» на странице «Подписание».
  • Добавьте ссылку на сборку System.Data.Entity.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top