Makale numarası: 897297 - Son Gözden Geçirme: 14 Kasım 2007 Çarşamba - Gözden geçirme: 2.7

Nasıl yapılır: klasöründen uygulama temel Visual Basic 2005 veya Visual Basic. NET'te farklı bir klasörde bulunan derlemeleri tüketirler.

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Giriş

Bu makalede, nasıl yapılır:'den Microsoft Visual Basic .NET'i veya Microsoft Visual Basic 2005 çözüm uygulama temel klasöründen farklı bir klasörde bulunan derlemeleri tüketmek anlatılır.

Daha fazla bilgi

Bir Visual Basic 2005 ya da Visual Basic .NET uygulaması çalıştırdığınızda, genel birleştirme önbelleğine veya uygulama klasöründe uygulamanın kullandığı tüm derlemelere bulmak ortak dil çalışma zamanı (CLR) bekler. CLR başarıyla bir derlemeye bağlayın değil, aşağıdakine benzer bir hata iletisi alırsınız:
System.IO.FileNotFoundException dosya veya derleme AssemblyName ya da bağımlılıklarından biri ad, bulunamadı.
Pek çok yöntem, farklı bir klasörde bulunan bir derleme bulmak için kullanabilirsiniz. Bu makalede, aşağıdaki üç yöntem açıklanır.

Yöntem 1: genel derleme önbelleğinde derlemeleri yükle

Bu yöntem, bir derleme kesin adı ile oturum açma gerektirir. Derleme kesin adı ile oturum açın ve sonra da derleme genel derleme önbelleğinde yüklemek için aşağıdaki adımları izleyin:
  1. Derleme kesin adı kullanarak adlandırın. Bunu yapmak için şu adımları izleyin:
    1. Bir şifreleme anahtar çifti oluşturmak için Microsoft .NET Framework yazılım geliştirme seti ile (SDK) bulunan güçlü adı aracını (Sn.exe) kullanın.

      Visual Studio .NET veya Microsoft Visual Studio 2005 komut istemi ', aşağıdaki komutu yazın:
      sn -k AssemblyName .snk
      Bu komut oluşturur ve bir anahtar çifti AssemblyName .snk adlı bir dosyada depolar.
    2. Kaynak kodu (AssemblyInfo.vb) aşağıdaki düzey derleme özniteliği içerir:
      <Assembly: AssemblyKeyFile("AssemblyName.snk")>
      
  2. Genel birleştirme önbelleği aracı (Gacutil.exe), .NET Framework derleme genel derleme önbelleğinde kaydetmek için kullanın. Bunu yapmak için <a0></a0>, Visual Studio .NET komut isteminde aşağıdaki komutu yazın:
    Gacutil /i AssemblyName .dll
Derlemeler ve genel birleştirme önbelleğine ile çalışma hakkında daha fazla bilgi için ziyaret edin, aşağıdaki Microsoft Developer Network (MSDN) Web sitesi:
http://msdn2.microsoft.com/en-us/library/6axd4fx6(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/6axd4fx6(vs.71).aspx)
Nasıl yapılır: Derleme bir kesin adla oturum hakkında daha fazla bilgi için aşağıdaki MSDN Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/xc31ft41(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/xc31ft41(vs.71).aspx)
Not Bu yöntem, zor ve zaman alıcı birçok derlemeler varsa ve Bileşen Nesne Modeli (COM) nesneleri derlemeleri bağımlılıklar varsa olabilir. Herhangi bir derleme bağımlılığı CLR tarafından keşfedilebilir olmalıdır. Genel birleştirme önbelleğine, derleme'ı yüklemeyi planlıyorsanız, bu nedenle de derlemenin bağımlılıklar genel birleştirme önbelleğine yükleyin.

Yöntem 2: CodeBase etiketi ile birlikte bir Application.Config dosyasını kullanın...

Uygulama yapılandırma dosyası'nı kullanarak, CLR için bağımlı derlemelerin görünmelidir konumu belirtebilirsiniz. Özellikle, kod temeli etiketini kullanın. Bu etiketi kullanarak, ayrı bir klasörde, derlemeleri koyabilirsiniz. Ancak, bu yöntem hala kitaplığı derleme kesin adı kullanarak adı gerektirir. Uygulama yapılandırma dosyası kullanmak için aşağıdaki adımları izleyin:
  1. Bilgisayarınızı bir kitaplık derlemesi derleyin.
  2. Derlemenin kesin adı kullanarak oturum açın.
  3. Ana uygulama, <a0>Kitaplığı</a0> derlemesine ekleyin ve sonra da ana uygulamayı derleyin.
  4. Ortak anahtar belirteci, kesin adlandırılmış kitaplığı derlemesinden edinin. Bunu yapmak için şu adımları izleyin:
    1. Başlat ' ı tıklatın, Programlar ' ı tıklatın ve sonra Microsoft Visual Studio .NET 2003'ü tıklatın.

      Not BVisual Studio 2005 ' Başlat ' ı tıklatın, Programlar ' ı tıklatın ve sonra da Microsoft Visual Studio 2005 ' i tıklatın.
    2. Visual Studio .NET araçları ' nı tıklatın ve Visual Studio .NET 2003 komut istemi ' ni tıklatın.

      Not Visual Studio 2005, Visual Studio 2005 araçları ' nı tıklatın ve sonra Visual Studio .NET 2005 komut istemi ' ni tıklatın.
    3. Dizin için Kitaplık derlemesi konumunu değiştirin. Genellikle, depo gözünü konumdur Kitaplık derlemesi projenizin klasör.
    4. Aşağıdaki komutu yazın ve ENTER tuşuna basın:
      SN -T MyLibrary .dll
      NotMyLibrary, Kitaplık derlemesi adıyla değiştirin. Doğru değeri döndürülür emin olmak için büyük bir T kullandığınızdan emin olun -T geçin.
    5. Bu komut, Kitaplık derlemesi, ortak anahtar belirteci temsil eden bir onaltılık değer döndürür. Uygulama yapılandırma dosyasında kullanılan onaltılık değeri bir kopyasını oluşturun.
  5. Derleme sürümünü, kesin adlandırılmış kitaplığı derlemesinden edinin. Derleme sürümünü edinmek için aşağıdaki yöntemlerden birini kullanın:
    • Yöntem A: Windows Gezgini'nde dosya özellikleri
      1. Windows Gezgini'nde, Kitaplık derlemesi'ı sağ tıklatın ve sonra da Properties ' i tıklatın.
      2. Özellikler iletişim kutusunda sürüm sekmesini tıklatın.
      3. Diğer sürüm bilgileri altında Derleme sürümü ' nü tıklatın. Uygulama yapılandırma dosyasında kullanılacak olan bu sürüm değeri bir kopyasını oluşturun.
    • Yöntem B: MSIL Disassembler (ILDASM)
      1. AT Visual Studio .NET 2003 komut istemini, ILDASM yazın ve ENTER tuşuna basın.
      2. Dosya menüsünden ' ı tıklatın.
      3. Kendi özel derleme'ı tıklatın ve sonra ' ı tıklatın.
      4. Alt bölmede, derleme sürüm (.ver) bulun. Derleme sürümünü örneği aşağıda verilmektedir:
        .assembly yourAssemblyName
        {
          .ver 1:0:1969:29451
        }
        
        Not bu örnekte, derleme sürümünü 1.0.1969.29541 olur.
  6. Uygulama yapılandırma dosyası oluşturun. Bunu yapmak için şu adımları izleyin:
    1. Not Defteri'nde aşağıdaki XML kodu yapıştırın:
      <configuration>
         <runtime>
            <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
               <dependentAssembly>
                  <assemblyIdentity name="MyLibrary"
                                    culture="neutral" 
                                    publicKeyToken="fa4e781ae585ee8a"/>
      
                  <codeBase version="1.0.1074.32347"
      		        href="FILE://C:/assemblies/myLibrary.dll"/>
               </dependentAssembly>
            </assemblyBinding>
         </runtime>
      </configuration>
      
    2. Aşağıdaki XML öğesi özniteliklerini değiştirin.
      Bu tabloyu kapaBu tabloyu aç
      Element özniteliğiBu değişiklik
      Assemblyıdentity adıMyLibrary için Kitaplık derlemesi adını değiştirin.
      Assemblyıdentity publicKeyToken4. Adımda kopyaladığınız ortak anahtar belirteci değere publicKeyToken özniteliğini değiştirin.
      sürüm codeBaseÖznitelik sürüm 5. adımda kopyaladığınız sürüm değeri değiştirin.
      href codeBaseHref özniteliği, tam yol adını ve dosya adını, Kitaplık derlemesi için işaret edecek biçimde değiştirin.
    3. Dosyayı, .exe dosya adı ana derleme olarak kaydedin. .Config dosya adı uzantısını kullanın. Örneğin, ana birleştirme "MyProject.exe" olarak adlandırılmışsa, uygulama yapılandırma dosyası adı "MyProject.exe.config" olur Bu dosya, ana uygulama derleme bulunduğu aynı klasöre kaydetmeniz gerekir.
Daha fazla bilgi için aşağıdaki MSDN Web sitelerini ziyaret edin:
Bir derlemenin konumunu belirtme
http://msdn2.microsoft.com/en-us/library/4191fzwb(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/4191fzwb(vs.71).aspx)

<codebase> öğesi
http://msdn2.microsoft.com/en-us/library/efs781xb(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/efs781xb(vs.71).aspx)

Nasıl çal??ma zaman? derlemeler bulur.
http://msdn2.microsoft.com/en-us/library/yx7xezcf(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/yx7xezcf(vs.71).aspx)

Yöntem 3: System.Reflection.Assembly.LoadFrom yöntemi kullanın...

Bu yöntem, açıkça bir tam olarak nitelenmiş yol adı ve tam olarak nitelenmiş dosya adı derleme yüklenemedi Assembly.LoadFrom yöntemini kullanır. Bunu yapmak için şu adımları izleyin:
  1. Bilgisayarınızı bir kitaplık derlemesi derleyin.
  2. Bilgisayarınızı Derleme yüklenemedi aşağıdaki kod örneği benzer bir kod kullanın:
    Dim yourAssembly As System.Reflection.Assembly = _
          System.Reflection.Assembly.LoadFrom("c:\yourAssembly.dll")
    
Not Tüm bağımlı derlemelerin varsa, bunları ana birleştirme bulunduğu aynı yolda bulun.

Assembly.LoadFrom yöntemi hakkında daha fazla bilgi için aşağıdaki MSDN Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/system.reflection.assembly.loadfrom(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.reflection.assembly.loadfrom(vs.71).aspx)

Yöntem 4: AssemblyResolve olay kullan

Başarısız bir derlemeye bağlamak CLR çalışır olduğunda AssemblyResolve olayı oluşur. AddHandler yöntemi uygulamada AssemblyResolve olayı her gerçekleştiğinde doğru derleme döndüren bir olay işleyicisi eklemek için kullanın.

Not Bu yöntem var olmayan derlemeleri güçlü adlarını kullanarak adı gerektirir.

AssemblyResolve olay işleyicisinin derleme için CLR bağlama gösteren [derleme] nesne döndürmelidir. Genellikle, derleme yüklenemedi Assembly.LoadFrom yöntemini kullanabilirsiniz. Daha sonra yüklenen derlemesi verir.

Not Olay işleyicisi, yeniden konumlandırılan birleştirmeler için başvuru içeren bir yordam içinde yer almalıdır. Ayrıca, olay işleyicisi yeniden konumlandırılan derlemeleri bağlı herhangi bir kod çağrılmadan önce çağrılmalıdır.

Aşağıdaki kod, derleme AssemblyResolve olay kullanılarak yüklenen bir uygulamanın bir örnektir:
Module Module1
    Sub Main()
        Dim f As Form1

        'Set up event handler for AssemblyResolve event
        AddHandler AppDomain.CurrentDomain.AssemblyResolve, _
                   AddressOf MyResolveEventHandler

        f = New Form1()
        Application.Run(f)
    End Sub

    Function MyResolveEventHandler(ByVal sender As Object, _
                                   ByVal args As ResolveEventArgs) As [Assembly]

        'Load the assembly from the correct location and return the assembly
        'This handler is only called if we try to bind to the assembly and the attempt fails.
        Dim MyAssembly As [Assembly]
        MyAssembly = [Assembly].LoadFrom("C:\assemblies\MyLibrary.dll")
        Return MyAssembly
    End Function
End Module


'Some sample code in Form1 which depends on the external assembly
Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click

        Dim x As MyLibrary.Application
        x = New MyLibrary.Application()
        x.MyMethod()
    End Sub
End Class
AppDomain.AssemblyResolve olay hakkında daha fazla bilgi için aşağıdaki MSDN Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/system.appdomain.assemblyresolve(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.appdomain.assemblyresolve(vs.71).aspx)

Referanslar

Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
302340  (http://support.microsoft.com/kb/302340/ ) .NET Framework SDK'sındaki güçlü bir ada sahip bir derleme oluşturma hakkında

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Anahtar Kelimeler: 
kbmt kbvs2005swept kbvs2005applies kbprogramming kbhowto kbinfo KB897297 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:897297  (http://support.microsoft.com/kb/897297/en-us/ )