Freigeben über


.NET Framework-Assemblyvereinheitlichung

Bei der parallelen Ausführung kann eine Anwendung aus Komponenten bestehen, die auf verschiedenen Versionen von .NET Framework aufbauen. Dies kann zu Konflikten zwischen den Abhängigkeiten der Komponenten führen. Angenommen, Komponente A baut auf .NET Framework, Version 1.0, auf und muss Version 1.0 der Assembly System.Data verwenden. Komponente B baut auf .NET Framework, Version 1.1, auf und muss Version 1.1 der Assembly System.Data verwenden. Wenn die Versionen der Assembly inkompatibel sind, aber gleichzeitig geladen werden, führt dies möglicherweise zu unbeabsichtigten Ausnahmen bei der Typumwandlung oder zu schwerer wiegenden Problemen.

Bestimmen der zu verwendenden .NET Framework-Version durch die Anwendung

Diese Probleme bei einer Anwendung mit Komponenten, die auf verschiedenen Versionen von .NET Framework aufbauen, werden dadurch gelöst, dass die zu der Anwendung gehörige Laufzeitversion ermittelt, welche Version der .NET Framework-Assemblies von der Anwendung und ihren Komponenten verwendet wird. Wenn die Anwendung wie im vorhergehenden Beispiel der Version 1.1 von .NET Framework zugeordnet ist, wird Version 1.1 der Assembly System.Data geladen und von allen Komponenten der Anwendung gemeinsam verwendet. Der Verweis von Komponente A auf Version 1.0 der Assembly System.Data wird zur Laufzeit so geändert, dass er auf Version 1.1 verweist.

Dieses Verhalten kann überschrieben werden, indem den Dateien Machine.config oder Web.config <bindingRedirect>-Elemente hinzugefügt werden. Dadurch kann bei einer Anwendung eine aktualisierte Assemblyversion verwendet werden, die für bestimmte Anwendungsarten als Ersatz einer vorhandenen Assembly vorgesehen ist. Wenn z. B. künftig eine aktualisierte Version von System.Web.Service.dll veröffentlicht wird, die SOAP, Version 1.2, unterstützt, sollte von der Anwendung diese Version anstelle der ursprünglich mit der Laufzeit installierten Version verwendet werden.

Auch dieses Verhalten kann in der ASP.NET-Hostkonfigurationsdatei (Aspnet.config) überschrieben werden. Mit dieser Datei stellt ASP.NET sicher, dass die Version von System.Web.dll und System.Web.RegularExpressions.dll immer mit der Laufzeitversion der Anwendung übereinstimmt, unabhängig von sämtlichen Überschreibungen in der Datei Web.config.

Möglicherweise möchten Sie gelegentlich in einer mit einer früheren Version erstellten Anwendung eine Komponente verwenden, die auf einer neueren Version von ASP.NET aufbaut. Beachten Sie, dass die zu einer Anwendung gehörige ASPNET ISAPI-Version immer die für eine Anwendung verwendete Laufzeitversion ermittelt. Wenn die Anwendung so konfiguriert ist, dass sie die frühere Laufzeitversion verwendet, wird die Komponente zur Laufzeit automatisch so umgeleitet, dass sie ebenfalls diese Version verwendet. Wenn Sie eine Komponente, die mit einer neueren Version von .NET Framework erstellt wurde, in einer Anwendung verwenden, die auf einer früheren Version aufbaut, müssen Sie Folgendes beachten:

  • Vergewissern Sie sich, dass die Komponente keine Features verwendet bzw. von keinen Verhaltensweisen abhängig ist, die nur bei der neueren Version von .NET Framework vorhanden sind. Diese Features sind in der früheren Version der Laufzeit u. U. nicht verfügbar.
  • In IIS werden Skriptzuordnungen von ASP.NET verwendet, um eine Anwendung an eine Version der Laufzeit zu binden. Weder das <supportedRuntime>-Konfigurationselement noch das <requiredRuntime>-Konfigurationselement kann in ASP.NET-Anwendungen angewendet werden.

Wenn die Laufzeitversion, mit der die Komponente erstellt wurde, auf dem Computer installiert ist, können Sie stattdessen die Anwendung auch so neu konfigurieren, dass die neuere Laufzeitversion verwendet wird. Da neuere Versionen von .NET Framework abwärtskompatibel gestaltet sind, kann die Anwendung ohne weitere Änderungen verwendet werden. Weitere Informationen über das Konfigurieren einer ASP.NET-Anwendung für die Verwendung einer bestimmten Version der Laufzeit finden Sie unter Konfigurieren einer ASP.NET-Anwendung für eine ASP.NET-Version.

Siehe auch

ASP.NET-Unterstützung der parallelen Ausführung | "<bindingRedirect>"