Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Uwaga / Notatka
Ten artykuł jest specyficzny dla programu .NET Framework. Nie ma zastosowania do nowszych implementacji platformy .NET, w tym .NET 6 i nowszych wersji.
Wykonywanie równoległe to możliwość uruchamiania wielu wersji aplikacji lub składnika na tym samym komputerze. Można mieć wiele wersji środowiska uruchomieniowego języka wspólnego oraz wiele wersji aplikacji i składników korzystających z wersji środowiska uruchomieniowego na tym samym komputerze w tym samym czasie.
Poniższa ilustracja przedstawia kilka aplikacji korzystających z dwóch różnych wersji środowiska uruchomieniowego na tym samym komputerze. Aplikacje A, B i C używają środowiska uruchomieniowego w wersji 1.0, podczas gdy aplikacja D używa środowiska uruchomieniowego w wersji 1.1.
Program .NET Framework składa się ze środowiska uruchomieniowego języka wspólnego i kolekcji zestawów zawierających typy interfejsów API. Środowisko uruchomieniowe i zestawy .NET Framework są wersjonowane oddzielnie. Na przykład wersja 4.0 środowiska uruchomieniowego jest w rzeczywistości w wersji 4.0.319, podczas gdy wersja 1.0 zestawów .NET Framework jest w wersji 1.0.3300.0.
Poniższa ilustracja przedstawia kilka aplikacji korzystających z dwóch różnych wersji składnika na tym samym komputerze. Aplikacje A i B używają wersji 1.0 składnika, podczas gdy aplikacja C używa wersji 2.0 tego samego składnika.
Wykonywanie równoległe zapewnia większą kontrolę nad wersjami składnika, z którym wiąże się aplikacja, i większą kontrolę nad wersją środowiska uruchomieniowego używanego przez aplikację.
Zalety wykonywania obok siebie
Przed systemem Windows XP i programem .NET Framework wystąpiły konflikty bibliotek DLL, ponieważ aplikacje nie mogły odróżnić niezgodnych wersji tego samego kodu. Informacje o typie zawarte w dll były powiązane tylko z nazwą pliku. Aplikacja nie miała możliwości poznania, czy typy zawarte w dll były tymi samymi typami, za pomocą których aplikacja została skompilowana. W związku z tym nowa wersja składnika może zastąpić starszą wersję i przerwać działanie aplikacji.
Wykonywanie równoległe i platforma .NET Framework udostępniają następujące funkcje w celu wyeliminowania konfliktów bibliotek DLL:
Zestawy o silnych nazwach.
Wykonywanie współistniejące używa zestawów o silnych nazwach, aby powiązać informacje o typie z określoną wersją zestawu. Zapobiega to powiązaniu aplikacji lub składnika z nieprawidłową wersją zestawu. Zestawy o silnych nazwach umożliwiają również istnienie wielu wersji pliku na tym samym komputerze i używanie ich przez aplikacje. Aby uzyskać więcej informacji, zobacz Strong-Named Montaże.
Przechowywanie kodu z obsługą wersji.
Program .NET Framework zapewnia przechowywanie kodu uwzględniające wersję w globalnej pamięci podręcznej zestawów. Globalna pamięć podręczna zestawów to pamięć podręczna kodu całego komputera na wszystkich komputerach z zainstalowanym programem .NET Framework. Przechowuje zestawy na podstawie informacji o wersji, kulturze i wydawcy oraz obsługuje wiele wersji składników i aplikacji. Aby uzyskać więcej informacji, zobacz Global Assembly Cache.
Izolacja.
Za pomocą programu .NET Framework można tworzyć aplikacje i składniki, które są wykonywane w izolacji. Izolacja jest istotnym elementem wykonywania obok siebie. Obejmuje to informowanie o używanych zasobach i udostępnianie zasobów z ufnością między wieloma wersjami aplikacji lub składnika. Izolacja obejmuje również przechowywanie plików w określony sposób. Aby uzyskać więcej informacji na temat izolacji, zobacz Wytyczne dotyczące tworzenia składników do równoległego wykonywania.
Zgodność wersji
Wersje 1.0 i 1.1 programu .NET Framework zostały zaprojektowane tak, aby były ze sobą zgodne. Aplikacja utworzona przy użyciu programu .NET Framework w wersji 1.0 powinna działać w wersji 1.1, a aplikacja utworzona przy użyciu programu .NET Framework w wersji 1.1 powinna działać w wersji 1.0. Należy jednak pamiętać, że funkcje interfejsu API dodane w wersji 1.1 programu .NET Framework nie będą działać z wersją 1.0 programu .NET Framework. Aplikacje utworzone w wersji 2.0 będą działać tylko w wersji 2.0. Aplikacje w wersji 2.0 nie będą działać w wersji 1.1 lub starszej.
Wersje programu .NET Framework są traktowane jako pojedyncza jednostka składająca się ze środowiska uruchomieniowego i skojarzonych z nim zestawów programu .NET Framework (pojęcie określane jako zjednoczenie zestawu). Powiązanie zestawu można przekierować w celu uwzględnienia innych wersji zestawów .NET Framework, ale zastąpienie domyślnego powiązania zestawu może być ryzykowne i musi być rygorystycznie przetestowane przed wdrożeniem.
Lokalizowanie informacji o wersji środowiska uruchomieniowego
Informacje o wersji środowiska uruchomieniowego skompilowanej aplikacji lub składnika oraz o wersjach środowiska uruchomieniowego wymaganego do uruchomienia aplikacji są przechowywane w dwóch lokalizacjach. Gdy aplikacja lub składnik jest kompilowany, informacje o wersji środowiska uruchomieniowego używanej do kompilowania są przechowywane w zarządzanym pliku wykonywalnym. Informacje o wersjach środowiska uruchomieniowego wymagane przez aplikację lub składnik są przechowywane w pliku konfiguracji aplikacji.
Informacje o wersji środowiska uruchomieniowego w zarządzanym pliku wykonywalnym
Nagłówek pliku wykonywalnego (PE) każdej zarządzanej aplikacji i jej komponentów zawiera informacje o wersji środowiska uruchomieniowego, z którym został skompilowany. Środowisko uruchomieniowe języka wspólnego używa tych informacji do określenia najbardziej prawdopodobnej wersji środowiska uruchomieniowego, która musi zostać uruchomiona przez aplikację.
Informacje o wersji środowiska uruchomieniowego w pliku konfiguracji aplikacji
Oprócz informacji w nagłówku pliku PE można wdrożyć aplikację z plikiem konfiguracji aplikacji, który udostępnia informacje o wersji środowiska uruchomieniowego. Plik konfiguracji aplikacji jest plikiem opartym na formacie XML utworzonym przez dewelopera aplikacji i dostarczanym z aplikacją. <RequiredRuntime>, element<sekcji uruchamiania>, jeśli jest obecny w tym pliku, określa, które wersje środowiska uruchomieniowego i które wersje składnika obsługuje aplikacja. Możesz również użyć tego pliku podczas testowania, aby przetestować zgodność aplikacji z różnymi wersjami środowiska uruchomieniowego.
Niezarządzany kod, w tym aplikacje COM i COM+, może zawierać pliki konfiguracji aplikacji używane przez środowisko uruchomieniowe do interakcji z kodem zarządzanym. Plik konfiguracji aplikacji ma wpływ na dowolny kod zarządzany aktywowany za pośrednictwem modelu COM. Plik może określać obsługiwane wersje środowiska uruchomieniowego, a także przekierowania bibliotek. Domyślnie, aplikacje międzyoperacyjne COM wywołujące kod zarządzany używają najnowszej wersji środowiska uruchomieniowego zainstalowanego na komputerze.
Aby uzyskać więcej informacji na temat plików konfiguracji aplikacji, zobacz Konfigurowanie aplikacji.
Określanie, która wersja środowiska uruchomieniowego ma być ładowana
Środowisko uruchomieniowe języka wspólnego używa następujących informacji, aby określić, która wersja środowiska uruchomieniowego ma być ładowana dla aplikacji:
Dostępne wersje środowiska uruchomieniowego.
Wersje środowiska uruchomieniowego obsługiwane przez aplikację.
Obsługiwane wersje środowiska uruchomieniowego
Środowisko uruchomieniowe używa pliku konfiguracji aplikacji i przenośnego nagłówka pliku wykonywalnego (PE), aby określić, która wersja środowiska uruchomieniowego jest obsługiwana przez aplikację. Jeśli nie ma pliku konfiguracji aplikacji, środowisko uruchomieniowe ładuje wersję środowiska uruchomieniowego określoną w nagłówku pliku PE aplikacji, jeśli ta wersja jest dostępna.
Jeśli plik konfiguracji aplikacji jest obecny, środowisko uruchomieniowe określa odpowiednią wersję środowiska uruchomieniowego do załadowania na podstawie wyników następującego procesu:
Środowisko uruchomieniowe sprawdza element <supportedRuntime> Element w pliku konfiguracji aplikacji. Jeśli obecna jest co najmniej jedna ze wspieranych wersji środowiska uruchomieniowego określona w elemencie <supportedRuntime>, środowisko uruchomieniowe ładuje wersję określoną przez pierwszy element <supportedRuntime>. Jeśli ta wersja jest niedostępna, środowisko uruchomieniowe sprawdza następny <obsługiwany elementRuntime> i próbuje załadować określoną wersję środowiska uruchomieniowego. Jeśli ta wersja środowiska uruchomieniowego jest niedostępna, zostaną zbadane kolejne elementy <supportedRuntime>. Jeśli żadna z obsługiwanych wersji środowiska uruchomieniowego nie jest dostępna, środowisko uruchomieniowe nie może załadować wersji środowiska uruchomieniowego i wyświetli użytkownikowi komunikat (zobacz krok 3).
Środowisko uruchomieniowe odczytuje nagłówek pliku wykonywalnego aplikacji PE. Jeśli dostępna jest wersja środowiska uruchomieniowego określona przez nagłówek pliku PE, środowisko uruchomieniowe ładuje wersję. Jeśli określona wersja środowiska uruchomieniowego jest niedostępna, środowisko uruchomieniowe wyszukuje wersję środowiska uruchomieniowego określonego przez firmę Microsoft, aby było zgodne z wersją środowiska uruchomieniowego w nagłówku PE. Jeśli ta wersja nie zostanie znaleziona, proces będzie kontynuowany w kroku 3.
W środowisku uruchomieniowym zostanie wyświetlony komunikat z informacją, że wersja środowiska uruchomieniowego obsługiwana przez aplikację jest niedostępna. Środowisko uruchomieniowe nie jest ładowane.
Uwaga / Notatka
Możesz pominąć wyświetlanie tego komunikatu przy użyciu wartości NoGuiFromShim w kluczu rejestru HKLM\Software\Microsoft\. NETFramework lub używając zmiennej środowiskowej COMPLUS_NoGuiFromShim. Można na przykład pominąć komunikat dla aplikacji, które zwykle nie wchodzą w interakcje z użytkownikiem, takie jak instalacje nienadzorowane lub usługi systemu Windows. Gdy ten komunikat zostanie pominięty, środowisko uruchomieniowe zapisuje komunikat w dzienniku zdarzeń. Ustaw wartość rejestru NoGuiFromShim na 1, aby pominąć ten komunikat dla wszystkich aplikacji na komputerze. Alternatywnie ustaw zmienną środowiskową COMPLUS_NoGuiFromShim na 1, aby pominąć komunikat dla aplikacji uruchomionych w określonym kontekście użytkownika.
Uwaga / Notatka
Po załadowaniu wersji środowiska uruchomieniowego przekierowania powiązań zestawów mogą określać, że zostanie załadowana inna wersja pojedynczego zestawu .NET Framework. Te przekierowania powiązań mają wpływ tylko na określony zestaw, który jest przekierowywany.
Częściowo kwalifikowane nazwy zestawów i równoczesne wykonanie
Ponieważ są one potencjalnym źródłem problemów równoległych, częściowo kwalifikowane odwołania do zestawów mogą służyć tylko do powiązania z zestawami w katalogu aplikacji. Unikaj częściowo kwalifikowanych odwołań do zestawów w kodzie.
Aby ograniczyć częściowo kwalifikowane odwołania do zestawów w kodzie, możesz użyć elementu <qualifyAssembly> w pliku konfiguracji aplikacji, aby w pełni kwalifikować częściowo kwalifikowane odwołania do zestawów, które występują w kodzie. <Użyj elementu qualifyAssembly>, aby określić tylko pola, które nie zostały ustawione w odwołaniu częściowym. Tożsamość zestawu wymieniona w atrybucie fullName musi zawierać wszystkie informacje potrzebne do pełnej kwalifikacji nazwy zestawu: nazwa zestawu, klucz publiczny, kultura i wersja.
W poniższym przykładzie pokazano wpis z pliku konfiguracji aplikacji, aby jednoznacznie określić zestaw o nazwie myAssembly
.
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<qualifyAssembly partialName="myAssembly"
fullName="myAssembly,
version=1.0.0.0,
publicKeyToken=...,
culture=neutral"/>
</assemblyBinding>
Za każdym razem, gdy instrukcja ładowania zestawu odwołuje się do myAssembly
, te ustawienia pliku konfiguracyjnego powodują, że środowisko uruchomieniowe automatycznie przekształca częściowo kwalifikowane odwołanie myAssembly
we w pełni kwalifikowane. Na przykład Assembly.Load("myAssembly") staje się Assembly.Load("myAssembly, version=1.0.0.0, publicKeyToken=..., culture=neutral").
Uwaga / Notatka
Za pomocą metody LoadWithPartialName można pominąć ograniczenie środowiska uruchomieniowego języka wspólnego, które uniemożliwia częściowe przywoływanie zestawów z globalnej pamięci podręcznej zestawów. Ta metoda powinna być używana tylko w scenariuszach zdalnego dostępu, ponieważ może łatwo powodować problemy podczas współbieżnego wykonywania.
Tematy pokrewne
Nazwa | Opis |
---|---|
Jak włączyć i wyłączyć automatyczne przekierowywanie powiązań | Opisuje sposób powiązania aplikacji z określoną wersją zestawu. |
Konfigurowanie przekierowania powiązania zestawu | Objaśnia, jak przekierowywać odwołania do powiązań zestawów do określonej wersji zestawów .NET Framework. |
In-Process wykonywanie równoległe | Omówienie sposobu używania współbieżnej aktywacji hosta środowiska uruchomieniowego CLR w procesie, aby uruchomić wiele wersji środowiska CLR w jednym procesie. |
Zgromadzenia na platformie .NET | Zawiera koncepcyjne omówienie zestawów. |
Domeny Aplikacji | Zawiera koncepcyjne omówienie domen aplikacji. |