Требуется .NET 4.0 Полный профиль с - PullRequest
5 голосов
/ 19 июля 2011

У нас есть приложение, которое поддерживает как .NET 2.0, так и .NET 4.0, и мы переключаем несколько зависимых от фреймворка сборок с <bindingRedirect />. Мы использовали элемент <supportedRuntime />, чтобы позволить приложению запускаться с использованием новейшей инфраструктуры, если она доступна. Однако нам по-прежнему требуется профиль full , а не только профиль client .

Документация для .NET 3.5 указывает, что вы должны явно подписаться на поддержку только для клиента , добавив атрибут sku="client" к элементу <supportedRuntime />.

Имя атрибута sku чувствительно к регистру. Если атрибут sku отсутствует, или если его значение установлено на что-либо, кроме «клиента», среда выполнения предполагает, что приложение не является клиентским профилем .NET Framework применение.

Однако в .NET 4.0 подробная документация по атрибуту sku отсутствует. В наших тестах среда выполнения .NET будет использовать клиентский профиль .NET 4.0, даже если атрибут sku отсутствует. Это проблема, поскольку она не позволяет динамическое перенаправление с файлом .config. Я попытался использовать sku="full", чтобы заставить его использовать только полный профиль, но это просто не дает поддержки среды выполнения .NET 4.0.

Вопрос

Кто-нибудь знает способ принудительного использования полного профиля .NET при использовании <supportedRuntime /> (или другого сопоставимого решения) для поддержки нескольких версий .NET Framework?

Фрагмент из нашего файла .config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0.30319" />
        <supportedRuntime version="v2.0.50727" />
    </startup>

    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" 
                         appliesTo="v4.0.30319">

            <dependentAssembly>
                <assemblyIdentity name="Application"
                                  publicKeyToken="798276055709c98a"
                                  />

                <bindingRedirect oldVersion="4.1.2000.0"
                                 newVersion="4.1.4000.0" />

                <codeBase version="4.1.4000.0"
                          href="Redistributable\.NET 4.0\Application.dll" />

            </dependentAssembly>
         </assemblyBinding>
    </runtime>
</configuration>

Ответы [ 2 ]

4 голосов
/ 19 июля 2011

Насколько я понимаю, это будет работать:

<supportedRuntime version="v4.0.30319" sku=".NETFramework,Version=v4.0.1" />
<supportedRuntime version="v4.0.30319" sku=".NETFramework,Version=v4.0" />

Нет профиля = Полный, но профиль предназначен для ограничения меньшего SKU в моем понимании.

Список установленных SKU можно найти на

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs
0 голосов
/ 03 мая 2015

Согласно обновленной странице MSDN .NET 4.5 и 4.6 для Элемент , есть атрибут «Профиль» для атрибута sku, и единственное значение для него - «Клиент».", не имея этого, кажется, подразумевает только" Полный "(согласно диаграмме sku на этой странице).Таким образом, вы должны быть хорошо со следующим:

<startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
    <supportedRuntime version="v2.0.50727" />
</startup>

Обратите внимание, что в соответствии с этой связанной страницей MSDN:

Начиная с .NET Framework 4, только основной и вспомогательныйтребуются номера версий (то есть «v4.0» вместо «v4.0.30319»).Рекомендуется использовать более короткую строку.

...