Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Assembly 'AssemblyName1' verwendet 'TypeName', welche eine höhere Version hat als die referenzierte Assembly 'AssemblyName2'.
Sie greifen auf einen Typ zu, der eine höhere Versionsnummer aufweist als die Versionsnummer in einer Assembly, auf die verwiesen wird. Dieser Fehler wird in der Regel durch die versehentliche Verwendung von zwei Versionen derselben Assembly verursacht.
Angenommen, Sie haben zwei Assemblies, Asmb1 und Asmb2. Assembly Asmb1 verweist auf Version 1.0 der Assembly Asmb2. Assembly Asmb1 verwendet auch eine Klasse MyClass , die der Assembly Asmb2 in Version 2.0 hinzugefügt wurde. Der Compiler verfügt über Vereinheitlichungsregeln für Referenzbindungen, und ein Verweis auf Version 2.0 in MyClass kann nicht von Version 1.0 erfüllt werden.
Examples
Das folgende ausführlichere Beispiel besteht aus vier Codemodulen:
- Zwei DLLs, die identisch sind, mit Ausnahme eines Versionsattributs.
- Eine dritte DLL, die auf die ersten beiden verweist.
- Ein Client, der nur auf Version 1.0 der identischen DLLs verweist, aber von Version 2.0 auf eine Klasse zugreift.
Der folgende Code erstellt den ersten der identischen DLLs. Informationen zum Generieren einer Schlüsseldatei finden Sie unter KeyFile (C#-Compileroptionen).
// CS1705a.cs
// Compile by using the following command:
// csc /target:library /out:C:\\CS1705.dll /keyfile:mykey.snk CS1705a.cs
// The DLL is created in the C:\ directory.
// The AssemblyVersion attribute specifies version 1.0 for this DLL.
[assembly:System.Reflection.AssemblyVersion("1.0")]
public class Class1
{
public void Method1() {}
}
Der folgende Code definiert Version 2.0 der Assembly, wie durch das AssemblyVersionAttribute Attribut angegeben.
// CS1705b.cs
// Compile by using the following command:
// csc /target:library /out:CS1705.dll /keyfile:mykey.snk CS1705b.cs
// The DLL is created in the current directory.
// The AssemblyVersion attribute specifies version 2.0 for this DLL.
[assembly:System.Reflection.AssemblyVersion("2.0")]
public class Class1
{
public void Method1() { }
}
Der folgende Code verweist auf die beiden DLL-Versionen, die im vorherigen Code definiert sind.
AssemblyA bezieht sich auf die von CS1705a.cs erstellte DLL (Version 1.0).
AssemblyB bezieht sich auf die von CS1705b.cs erstellte DLL (Version 2.0). In ClassC sind zwei Methoden definiert. Der erste , Return1Agibt ein Objekt vom Typ Class1Azurück, das ein Alias für Class1 version 1.0 der DLL ist. Der zweite, Return1B, gibt ein Objekt vom Typ Class1B zurück, das ein Alias für Class1 aus Version 2.0 der DLL ist. Die Definition von Return1A erzeugt eine Abhängigkeit auf Version 1.0; die Definition von Return1B erzeugt eine Abhängigkeit auf Version 2.0.
// CS1705c.cs
// Compile by using the following command. AssemblyA refers to the DLL created by
// CS1705a.cs (version 1.0). AssemblyB refers to the DLL created by CS1705b.cs
// (version 2.0).
// csc /target:library /r:AssemblyA=C:\\CS1705.dll /r:AssemblyB=CS1705.dll CS1705c.cs
extern alias AssemblyA;
extern alias AssemblyB;
// Class1A is an alias for type Class1 from VS1705a.cs, which is in version 1.0
// of the assembly. Class1B is an alias for type Class1 from CS1705b.cs, which
// is in version 2.0 of the assembly.
using Class1A = AssemblyA::Class1;
using Class1B = AssemblyB::Class1;
// Method Return1A in ClassC returns an object of type Class1A, which is
// Class1 from version 1.0 of the DLL. Method Return1B returns an object
// of type Class1B, which is Class1 from version 2.0 of the DLL.
public class ClassC
{
// The following line creates a dependency on version 1.0 of CS1705.dll.
// This is not the source of the problem when ClassC is accessed from
// CS1705d.cs because CS1705d.cs references version 1.0 of the DLL.
// Therefore, type Class1A and the assembly have the same version.
public static Class1A Return1A() { return new Class1A(); }
// The following line creates a dependency on version 2.0 of CS1705.dll.
// This causes compiler error CS1705 when ClassC is accessed from
// CS1705d.cs, because CS1705d.cs does not reference version 2.0 of the
// DLL. Class1B is the alias for Class1 in version 2.0, and CS1705d.cs
// references version 1.0.
public static Class1B Return1B() { return new Class1B(); }
}
Der folgende Code generiert Compilerfehler CS1705. Sie verweist auf die von CS1705a.cs erstellte DLL (Version 1.0). Jedoch greift der Code in der Main-Methode auf ClassC von CS1705c.cs zu.
ClassC verwendet einen Typ, der in CS1705b.cs definiert ist (Version 2.0). Dies führt zu Compilerfehler CS1705, da der Typ eine Versionsnummer für CS1705.dll aufweist, die höher als die referenzierte Version von CS1705.dllist.
// CS1705d.cs
// Compile by using the following command:
// csc /reference:C:\\CS1705.dll /reference:CS1705c.dll CS1705d.cs
// C:\\CS1705.dll is version 1.0 of the assembly.
class Tester
{
static void Main()
{
// Return1A returns a type defined in version 1.0.
ClassC.Return1A().Method1();
// Return1B returns a type defined in version 2.0.
ClassC.Return1B().Method1();
}
}
Sie können den Fehler auf eine der folgenden Arten beheben:
Aktualisieren Sie den Code so, dass alle Dateien dieselbe Version der DLL verwenden.
Fügen Sie einen Verweis auf Version 2.0 der DLL zu CS1705d.cs hinzu, indem Sie den folgenden Befehl zum Kompilieren verwenden:
csc /reference:C:\\CS1705.dll /reference:CS1705.dll /reference:CS1705c.dll CS1705d.csObwohl das Programm bei Verwendung dieses Befehls kompiliert wird, wird es trotzdem nicht ausgeführt. Um die Ausführung des Programms zu ermöglichen, können Sie eine Anwendungskonfigurationsdatei bereitstellen, die ein
<dependentAssembly>Element enthält, das<assemblyIdentity>verwendet und<codeBase>untergeordnete Elemente enthält, um den Speicherort der Version 1.0 der DLL anzugeben. Weitere Informationen zu Konfigurationsdateien finden Sie unter Konfigurieren von Apps.