Избегайте аденинга версии .NET

Поэтому иногда (часто!) вы хотите настроить таргетинг на определенную версию .NET(скажем, 3.0), но затем из-за некоторых пакетов обновлений .NET вы сталкиваетесь с такими проблемами, как:

  • Dispatcher.BeginInvoke(Delegate, Object[]) < - это было добавлено в версии 3.0 SP2 (3.0.30618)
  • System.Threading.WaitHandle.WaitOne(Int32) < - это было добавлено в 3.5 SP1, 3.0 SP2, 2.0 SP2

Теперь они обнаруживаются компилятором JIT, поэтому построение против .NET 3.0 в Visual Studio не гарантирует, что оно будет работать только в системах .NET 3.0.

Недостаточно

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

какой лучший способ избежать использования расширений?

Спасибо!

Ответы

Ответ 2

Microsoft полагает, что если у вас установлен .NET XXX, вы должны быть в последнем пакете обновления, потому что Windows Update вытолкнет их как критические обновления. Я знаю это хрупкое предположение и иногда ломается, но то, что должно произойти.

Наши продукты в настоящее время нацелены на .NET 3.5 SP1, и поэтому мы будем удивлены, чтобы найти целевую среду, по-прежнему использующую RTM.NET 3.5.

Ответ 3

Был способ показать окна, которые используют .Net. Это что-то вроде создания файла с именем dllhost.exe.config В windows\system32 с xmllike:

<? xml version = "1.0" ?>
<configuration>
<startup>
<SupportedRuntime version = XXXXXX>
</startup>
</configuration>

Смотрите: http://msdn.microsoft.com/en-us/library/w4atty68.aspx

Ответ 4

Прежде чем отправлять выпуск, скомпилируйте приложение с соответствующей версией Visual Studio, которая соответствует наименее общему знаменателю целевой целевой базы.

Просто держите виртуальную машину в готовности, которая имеет, скажем, Visual Studio 2005 без SP, и откомпилируйте решение оттуда до развертывания.