Aracılığıyla paylaş


Derleyici Hatası CS1705

'AssemblyName1' derlemesi, başvurulan 'AssemblyName2' derlemesinden daha yüksek bir sürüme sahip olan 'TypeName' kullanır.

Başvuruda bulunılan derlemedeki sürüm numarasından daha yüksek bir sürüm numarasına sahip bir türe erişmiş olursunuz. Bu hata genellikle aynı derlemenin iki sürümünün yanlışlıkla kullanılmasından kaynaklanır.

Örneğin, Asmb1 ve Asmb2 olmak üzere iki derlemeniz olduğunu varsayalım. Derleme Asmb1, Asmb2 derlemesinin 1.0 sürümüne başvurur. Derleme Asmb1 ayrıca sürüm 2.0'da asmb2 derlemesine eklenmiş bir sınıf MyClass kullanır. Derleyicinin başvuruların bağlanması için birleştirme kuralları vardır ve sürüm 2.0'daki bir MyClass başvurusu, sürüm 1.0 tarafından karşılanamaz.

Örnekler

Aşağıdaki daha ayrıntılı örnek dört kod modülünden oluşur:

  • Sürüm özniteliği dışında aynı olan iki DLL.
  • İlk iki DLL'ye referans veren üçüncü bir DLL.
  • Aynı DLL'lerin yalnızca 1.0 sürümüne başvuran ancak sürüm 2.0'dan bir sınıfa erişen bir istemci.

Aşağıdaki kod, aynı DLL'lerin ilkini oluşturur. Anahtar dosyası oluşturma hakkında bilgi için bkz. KeyFile (C# Derleyici Seçenekleri).

// 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() {}
}

Aşağıdaki kod, özniteliği tarafından AssemblyVersionAttribute belirtildiği gibi derlemenin 2.0 sürümünü tanımlar.

// 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() { }
}

Aşağıdaki kod, önceki kodda tanımlanan iki DLL sürümüne başvurur. AssemblyA CS1705a.cs (sürüm 1.0) tarafından oluşturulan DLL'ye başvurur. AssemblyB CS1705b.cs tarafından oluşturulan DLL'ye (sürüm 2.0) başvurur. içinde ClassCiki yöntem tanımlanır. İlki, Return1A nesnesi döndürür ve bu nesne, DLL'nin 1.0 sürümündeki Class1 için bir diğer ad olan Class1A türündedir. İkincisi, Return1BDLL'nin 2.0 sürümündeki diğer adı Class1B olan türünde Class1bir nesnesi döndürür. tanımı Return1A 1.0 sürümüne bağımlılık oluşturur; tanımı Return1B 2.0 sürümüne bir bağımlılık oluşturur.

// 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(); }
}

Aşağıdaki kod, CS1705 derleyici hatası oluşturur. CS1705a.cs (sürüm 1.0) tarafından oluşturulan DLL'ye başvurur. Ancak, Main yönteminde, kod CS1705c.cs'den ClassC erişir. ClassC CS1705b.cs (sürüm 2.0) ile tanımlanan bir tür kullanır. Bu, derleyici hatası CS1705'e neden olur çünkü tür, referans alınan CS1705.dll sürümünden daha yüksek bir sürüm numarasına sahiptir.

// 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();
    }
}

Hatayı aşağıdaki yollardan biriyle çözebilirsiniz:

  • Kodu, tüm dosyaların DLL'nin aynı sürümünü kullanması için güncelleştirin.

  • DLL'nin 2.0 sürümüne başvuru eklemek için aşağıdaki komutu kullanarak CS1705d.cs dosyasını derleyin.

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

    Bu komutu kullandığınızda program derlese de, yine de çalışmaz. Programın çalıştırılabilmesi için, dll'nin 1.0 sürümünün konumunu belirlemek amacıyla <assemblyIdentity> ve <codeBase> alt öğelerini kullanan bir öğesi içeren bir uygulama yapılandırma dosyası sağlayabilirsiniz. Yapılandırma dosyaları hakkında daha fazla bilgi için bkz. Uygulamaları Yapılandırma.

Ayrıca bakınız