(0) exportieren Drucken
Alle erweitern
Erweitern Minimieren
Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Compilerfehler CS1705

Die Assembly "Assemblyname1" verwendet "Typname", mit einer höheren Versionsnummer als die Assembly "Assemblname2", auf die verwiesen wird.

Sie greifen auf einen Typ, der eine höhere Versionsnummer als die in einer Assembly, auf die verwiesen wird, hat. In der Regel wird dieser Fehler vom versehentlichen Verwendung von zwei Versionen der gleichen Assembly verursacht.

Angenommen, Sie zwei Assemblys, Asmb1 und Asmb2 haben. Assembly Asmb1 verweist auf Version 1.0 der Assembly Asmb2. Assembly Asmb1 verwendet auch eine MyClass-Klasse, die Assembly Asmb2 in Version 2.0 hinzugefügt wurde. Der Compiler verfügt über Vereinheitlichungsregeln für Bindungsverweise, und ein Verweis auf MyClass in Version 2.0 kann nicht von Version 1.0 erfüllt werden.

Im Folgenden ausführlicheren Beispiel besteht aus vier Codemodulen:

  • Zwei DLLs, die bis auf das Versionsattribut identisch sind.

  • Eine dritte DLL, die die ersten zwei verweist.

  • Ein Client, der nur Version 1.0 der identischen DLLs verweist, sondern greift auf eine Klasse von Version 2.0.

Der folgende Code erstellt die erste der identischen DLLs. Informationen darüber, wie Sie eine 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 Attribut AssemblyVersionAttribute 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 die zwei DLL-Versionen, die im vorherigen Code definiert werden. AssemblyA verweist auf die DLL an, die von CS1705a.cs (Version 1.0) erstellt wird. AssemblyB verweist auf die DLL an, die von CS1705b.cs (Version 2.0) erstellt wird. In ClassC werden zwei Methoden definiert. Der erste, Return1A, gibt ein Objekt des Typs Class1A zurück, der ein Alias für Class1 von Version 1.0 der DLL übereinstimmt. Der zweite, Return1B, gibt ein Objekt des Typs Class1B zurück, der ein Alias für Class1 von Version 2.0 der DLL übereinstimmt. Die Definition von Return1A wird eine Abhängigkeit auf Version 1.0; die Definition von Return1B wird 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(); }
}

Im folgenden Code werden Compilerfehler generiert CS1705. Er verweist die DLL, die von CS1705a.cs (Version 1.0) erstellt wird. In der Methode Main, greift der Code auf ClassC von CS1705c.cs zu. ClassC verwendet einen Typ, der in CS1705b.cs (Version 2.0) definiert wird. Dies verursacht CS1705 Compilerfehler, da der Typ eine Versionsnummer für CS1705.dll, das höher ist, als die Referenz-DLL Version von CS1705.dll hat.

// 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 in einer der folgenden Methoden beheben:

  • Aktualisieren Sie den Code, damit alle Dateien die gleiche Version der DLL verwenden.

  • Fügen Sie einen Verweis auf Version 2.0 der DLL CS1705d.cs hinzu, indem Sie folgenden Befehl verwenden zu kompilieren:

    csc /reference:C:\\CS1705.dll /reference:CS1705.dll /reference:CS1705c.dll CS1705d.cs

    Obwohl das Programm kompiliert, wenn Sie diesen Befehl verwenden, wird er immer noch nicht ausgeführt. Um das Programm zu ermöglichen ausgeführt werden, können Sie eine Anwendungskonfigurationsdatei bereit stellen die <dependentAssembly>-Element enthält das <assemblyIdentity> und untergeordnete Elemente <CodeBase> verwendet um den Speicherort von Version 1.0 der DLL anzugeben. Weitere Informationen über Konfigurationsdateien finden Sie unter Konfigurationsdateien.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft