Podczas wykonywania aplikacji on.net 4.0, under.net 2, 0

Zakładając, że:

    [11]} poniższy kod źródłowy C# jest kompilowany pod. NET 2.0 (CLR 2.0) oraz
  1. powyższa aplikacja wykorzystuje app.config wymienione poniżej; oraz
  2. [11]} tylko. NET 4.0 (CLR 4.0) jest zainstalowany w środowisku klienta wykonującego aplikację,

To która wersja. Net jest ładowana wewnętrznie, aby uruchomić aplikację w środowisku klienta?

Opis

Poniższa aplikacja konsolowa pokaże po prostu, że jego wersja CLR jest v4.0.30319 w konsoli, ale odpowiedź @ Reed Copsey na stos (CLR 2.0 vs 4.0 wydajność?) pokazuje, że. NET 2.0 jest załadowany w tym przypadku. Co więcej, w MSDN mówi, Gdy useLegacyV2RuntimeActivationPolicy jest ustawione na false false:

Użyj domyślnej polityki aktywacji dla. NET Framework 4 i nowszych, , który ma pozwolić starszym technikom aktywacji runtime na załadowanie CLR Wersja 1.1 lub 2.0 do procesu.

Wygląda na to, że. NET 2.0 jest ładowane pomimo app.config posiadania konfiguracji. NET 4.0. Czy coś źle zrozumiałem?

Źródło

C # source code

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string version = Environment.Version.ToString();
            Console.WriteLine(version);
        }
    }
}

app.config

<?xml version="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="false">
        <supportedRuntime version="v4.0.30319"/>
    </startup>
</configuration>
Author: Community, 2011-08-03

1 answers

Najważniejsze jest to, że w Twoim scenariuszu określiłeś. Net 4 jako jedyne obsługiwane środowisko uruchomieniowe, więc Twoja aplikacja załaduje się z CLR 4.

Zachowanie CLR w twoim programie jest dokładnie takie, jak zostało zaprojektowane:

Kiedy uruchamiam Twoją aplikację testową z {[0] } jako v4. 0, Process Explorer pokazuje, że ładuje mscorlib v4.0.30319.

Kiedy uruchamiam z supportedRuntime jako v2.0.50727, Process Explorer pokazuje, że ładuje mscorlilb v2.0.50727.

Gdy uruchamiam Bez supportedRuntime elementu, Process Explorer pokazuje, że ładuje mscorlilb v2. 0.50727.

Ten blurb od Microsoft stwierdza, że element supportedRuntime definiuje konkretną wersję, na której działa twój program:

Domyślnie aplikacja działa w wersji. NET Framework, dla której została zbudowana. Jeśli ta wersja nie jest obecna, a plik konfiguracyjny aplikacji nie definiuje obsługiwanych wersji, może wystąpić błąd inicjalizacji. NET Framework. W takim przypadku próba uruchomienia aplikacji spowoduje porażka.

Aby zdefiniować konkretne wersje, na których działa aplikacja, dodaj jeden lub więcej elementów do pliku konfiguracyjnego aplikacji. Każdy element wyświetla listę obsługiwanych wersji runtime, przy czym pierwszy określa najbardziej preferowaną wersję, a ostatni określa najmniej preferowaną wersję.


W grę wchodzą dwa oddzielne elementy. Tylko element supportedRuntime dotyczy twojego scenariusza.

Element supportedRuntime definiuje wersje CLR na którym będzie działać Twoja aplikacja, w preferowanej kolejności. Jeśli podasz obsługiwane środowiska uruchomieniowe, wtedy będą używane te wersje CLR, przechodząc w dół listy od góry do dołu, aż do znalezienia zainstalowanej wersji CLR. Jeśli nie podasz support runtimes, wtedy twój program będzie działał z wersją CLR, według której został skompilowany.

Element useLegacyV2RuntimeActivationPolicy ma zastosowanie tylko do zespołów w trybie mieszanym- - - programów lub bibliotek DLL, które zawierają kod zarządzany (. Net) i niezarządzany (natywny). Twój przykładowy program nie jest montaż w trybie mieszanym. W przypadku zestawów w trybie mieszanym ustawienie wartości na false (domyślne) lub nie ustawienie wszystkich, używa nowego procesu.Net 4 Ładowanie obok siebie dla zestawów w trybie mieszanym, dzięki czemu aplikacja może działać z CLR 4 i załadować zestaw w trybie mieszanym w tym samym procesie za pomocą CLR 1.0-2.0. Ustawienie go na true zasadniczo przywraca poprzednią funkcjonalność przed. Net 4, gdzie w trakcie procesu funkcjonalność obok siebie jest wyłączona i niezależnie od wersji CLR jest wybrana do uruchomienia aplikacji spróbuje załadować zespół w trybie mieszanym. Wersja CLR użyta do załadowania zestawu w trybie mieszanym będzie zależeć od tego, która wersja została wybrana do uruchomienia aplikacji, na podstawie której wersja została użyta do skompilowania aplikacji, oraz na liście obsługiwanych środowisk uruchomieniowych, jeśli takie istnieją.


Istnieje artykuł MSDN Magazine i artykuł MSDN o ładowaniu. Net 4 i wykonywaniu Side-by-Side (in-Proc SxS) Dla komponentów COM, co ma również wpływ na twój scenariusz bez COM komponenty. Przed wprowadzeniem. Net 4, Jeśli skompilowano aplikację z wersją CLR, a ta wersja nie była dostępna w systemie w czasie wykonywania, aplikacja będzie automatycznie uruchamiana na nowszej wersji CLR, jeśli została zainstalowana. Od. Net 4 aplikacje nie będą teraz działać z nowszą wersją CLR, chyba że podasz nowszą wersję w elemencie supportedRuntimes.

Oto cytat z artykułu MSDN:

Twórcy aplikacji. Side-by-side hosting nie ma prawie żadnego wpływu na twórców aplikacji. Domyślnie aplikacje zawsze działają z wersją. NET Framework, na której zostały zbudowane; to się nie zmieniło. Jednak programiści mogą nadpisać to zachowanie i skierować aplikację do uruchomienia w nowszej wersji. NET Framework(zobacz scenariusz 2).

Twórcy i konsumenci bibliotek.Hosting typu Side-by-side nie rozwiązuje problemów ze zgodnością, z którymi borykają się twórcy bibliotek. Biblioteka ładowana bezpośrednio przez aplikację -- poprzez bezpośrednie odniesienie lub przez zespół.Load call -- kontynuuje korzystanie z runtime AppDomain, do którego zostanie załadowana. Powinieneś przetestować swoje biblioteki pod kątem wszystkich wersji. NET Framework, które chcesz obsługiwać. Jeśli aplikacja jest skompilowana przy użyciu środowiska uruchomieniowego. NET Framework 4, ale zawiera bibliotekę zbudowaną przy użyciu wcześniejszego środowiska uruchomieniowego, ta biblioteka będzie również używać środowiska uruchomieniowego. NET Framework 4. Jeśli jednak masz aplikację, która została zbudowana przy użyciu wcześniejszego środowisko uruchomieniowe i biblioteka, która została zbudowana przy użyciu. NET Framework 4, musisz wymusić, aby aplikacja również używała. NET Framework 4(patrz scenariusz 3).

Wreszcie, jeśli jesteś na Vista, Win7, Server 2008, Server 2008 R2, automatycznie masz zainstalowany CLR 2.0 . Dlatego, jeśli chcesz usunąć swój element supportedRuntimes lub zmienić go na v2.0.50727, nadal możesz mieć CLR 2.0 dostępne jako runtime.

. Net runtimes

 37
Author: nekno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-06 03:21:58