2015-05-05 3 views
2

Цитата из What's New in 4.6Как может одна и та же сборка вести себя по-разному при использовании приложения 4.5 или 4.6?

для приложений, ориентированных на .NET Framework 4.6 RC, Task и Task<TResult> объекты наследуют культуру и культуру пользовательского интерфейса вызывающего потока. Поведение приложений, ориентированных на предыдущие версии .NET Framework, или не предназначенных для конкретной версии .NET Framework, равно , равно .

Я всегда думал, что существует только v4.0.30319 на уровне сборки для 4.0, 4.0.1, 4.0.2, 4.0.3, 4.5, 4.5.1, 4.5.2 и 4.6 - и это 4.6 является только обновлением inplace для 4.0-4.5.2?

В моей current knowledge указанная версия файла app.config запускает окно сообщений, если SKU не установлен вообще - как это может повлиять на поведение сборок?

+1

Слишком рано для меня попробовать, но простое объяснение состоит в том, что он обращает внимание на [TargetFrameworkAttribute] (http://referencesource.microsoft.com/#mscorlib/system/runtime/versioning/targetframeworkattribute.cs,6a3c751444d92d65, Рекомендации). Как вы можете понять из ссылок, он уже используется для включения функций. –

+0

@HansPassant это означало бы, что инфраструктура полна проверок версий во время выполнения (возможно, используя «AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName'?), Имитируя более старые версии? Я еще не заметил, как «System.Uri» решает вести себя по-другому, если приложение достигает 4,5 или выше. – springy76

ответ

1

Эта страница говорит, что все это,

https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v=vs.110).aspx

Культура и задачи на основе асинхронных операций

Задача на основе модель асинхронного программирования использует задачи и объекты задач асинхронно выполнить делегаты по потоку пустые потоки. Конкретный поток, на котором выполняется конкретная задача, - , неизвестно заранее, но определяется только во время выполнения.

Для приложений, предназначенных для .NET Framework 4.6 RC или более поздних версий, культура является частью контекста асинхронной операции. В других словах , начиная с приложений, целевой асинхронной операции .NET Framework 4.6 RC, по умолчанию наследуют значения свойств CurrentCulture и CurrentUICulture , которые они запускают. Если текущая культура или текущая культура пользовательского интерфейса отличается от культуры системы, текущая культура пересекает границы потоков и становится текущей культурой потока пула потоков , выполняющего асинхронную операцию.

В следующем примере представлена ​​простая иллюстрация. Он использует атрибут TargetFrameworkAttribute для таргетинга .NET Framework 4.6 RC. В примере определяется делегат Func, formatDelegate, , который возвращает некоторые номера, отформатированные как значения валюты. Пример изменяет текущую культуру системы на французский (Франция) или, если Французский (Франция) уже является текущей культурой, английский (United States). Затем он:

  • Вызывает делегат напрямую, чтобы он выполнялся синхронно в основном потоке приложения.
  • Создает задачу, выполняющую асинхронный вызов в потоке пула потоков.
  • Создает задачу, которая синхронно выполняет делегат в потоке основного приложения, вызывая метод Task.RunSynchronously.

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

+0

и как теперь происходит сборка, на которую ссылается программа, по-другому? Например, System.Uri (в System.dll) начинает сохранять сегменты маршрута с более чем двумя последовательными точками (например, http: //localhost/dir1/.../dir2), начиная с 4.5 - LinqPad (который нацелен на 4.0) не сохраняет их, но использует тот же самый System.dll, который находится здесь в версии 4.5.2. (Я не могу обнаружить код обнаружения каркаса в System.Uri с использованием ILSpy) – springy76

+0

Могут быть много нарушений, и каждый из них имеет свои собственные советы по восстановлению. Я не могу дать вам универсальное решение, ни Microsoft. –

+0

Вы все еще не ответили на мой вопрос любыми способами. Когда я установил 4.6, то в моей системе больше нет 4.0 или 4.5. Как это делается? Что изменит TargetFrameworkAttribute? – springy76