İzlenecek yol: Visual Studio’da yönetilen bütünleştirilmiş kodlardan türleri ekleme

Tanımlayıcı adlı yönetilen derlemeden tür bilgilerini eklerseniz, sürüm bağımsızlığını elde etmek için bir uygulamada türleri gevşek bir şekilde çiftleştirebilirsiniz. Diğer bir ifadeyle, programınız her yeni sürüm için yeniden derlenmek zorunda kalmadan yönetilen kitaplığın herhangi bir sürümündeki türleri kullanacak şekilde yazılabilir.

Tür ekleme, Microsoft Office'ten otomasyon nesnelerini kullanan bir uygulama gibi com birlikte çalışma özelliğiyle sıklıkla kullanılır. Tür bilgilerini eklemek, bir programın aynı derlemesinin farklı bilgisayarlarda Microsoft Office'in farklı sürümleriyle çalışmasını sağlar. Ancak, tam olarak yönetilen çözümlerle tür ekleme özelliğini de kullanabilirsiniz.

Eklenebilen ortak arabirimleri belirttikten sonra, bu arabirimleri uygulayan çalışma zamanı sınıfları oluşturursunuz. İstemci programı, ortak arabirimleri içeren derlemeye başvurarak ve başvurunun Trueözelliğini olarak ayarlayarak Embed Interop Types tasarım zamanında arabirimler için tür bilgilerini ekleyebilir. İstemci programı daha sonra bu arabirimler olarak yazılan çalışma zamanı nesnelerinin örneklerini yükleyebilir. Bu, komut satırı derleyicisini kullanmaya ve EmbedInteropTypes derleyici seçeneğini kullanarak derlemeye başvurmaya eşdeğerdir.

Tanımlayıcı adlı çalışma zamanı derlemenizin yeni bir sürümünü oluşturursanız, istemci programının yeniden derlenmiş olması gerekmez. İstemci programı, ortak arabirimler için katıştırılmış tür bilgilerini kullanarak çalışma zamanı derlemesinin hangi sürümünün kullanılabiliyorsa kullanmaya devam eder.

Bu izlenecek yolda şunların yerine geçersiniz:

  1. Katıştırılabilir tür bilgilerini içeren bir ortak arabirim ile tanımlayıcı adlandırılmış bir derleme oluşturun.
  2. Ortak arabirimi uygulayan tanımlayıcı adlı bir çalışma zamanı derlemesi oluşturun.
  3. Ortak arabirimden tür bilgilerini ekleyen ve çalışma zamanı derlemesinden sınıfının bir örneğini oluşturan bir istemci programı oluşturun.
  4. Çalışma zamanı derlemesini değiştirin ve yeniden derleyin.
  5. Yeniden derlenmek zorunda kalmadan çalışma zamanı derlemesinin yeni sürümünü kullandığını görmek için istemci programını çalıştırın.

Not

Bilgisayarınız, aşağıdaki yönergelerde yer alan Visual Studio kullanıcı arabirimi öğelerinden bazıları için farklı adlar veya konumlar gösterebilir. Sahip olduğunuz Visual Studio sürümü ve kullandığınız ayarlar bu öğeleri belirler. Daha fazla bilgi için bkz. IDE'yi kişiselleştirme.

Koşullar ve sınırlamalar

Bir derlemeden tür bilgilerini aşağıdaki koşullar altında ekleyebilirsiniz:

  • Derleme en az bir ortak arabirimi kullanıma sunar.
  • Ekli arabirimler, benzersiz GUID'lere sahip ComImport öznitelikler ve Guid özniteliklerle ek açıklama ekler.
  • Derlemeye özniteliği veya PrimaryInteropAssembly özniteliği ve derleme düzeyi Guid özniteliğiyle ImportedFromTypeLib açıklama eklenir. Visual C# ve Visual Basic proje şablonları varsayılan olarak bir derleme düzeyi Guid özniteliği içerir.

Ekleme türünün birincil işlevi COM birlikte çalışma derlemelerini desteklemek olduğundan, tür bilgilerini tam olarak yönetilen bir çözüme eklediğinizde aşağıdaki sınırlamalar geçerlidir:

  • Yalnızca COM birlikte çalışma özelliğine özgü öznitelikler eklenir. Diğer öznitelikler yoksayılır.
  • Bir tür genel parametreler kullanıyorsa ve genel parametrenin türü eklenmiş bir türse, bu tür bir derleme sınırı boyunca kullanılamaz. Derleme sınırını aşma örnekleri arasında başka bir derlemeden yöntem çağırma veya başka bir derlemede tanımlanan bir türden tür türetme sayılabilir.
  • Sabitler eklenmez.
  • System.Collections.Generic.Dictionary<TKey,TValue> sınıfı, katıştırılmış bir türü anahtar olarak desteklemez. Eklenmiş bir türü anahtar olarak desteklemek için kendi sözlük türünüzü uygulayabilirsiniz.

Arabirim oluşturma

İlk adım, tür eşdeğerliği arabirim derlemesini oluşturmaktır.

  1. Visual Studio'da Dosya>Yeni Proje'yi> seçin.

  2. Yeni proje oluştur iletişim kutusunda, Şablon ara kutusuna sınıf kitaplığı yazın. Listeden C# veya Visual Basic Sınıf Kitaplığı (.NET Framework) şablonunu ve ardından İleri'yi seçin.

  3. Yeni projenizi yapılandırın iletişim kutusundaki Proje adı'nın altına TypeEquivalenceInterface yazıp Oluştur'u seçin. Yeni proje oluşturulur.

  4. Çözüm Gezgini'daClass1.cs veya Class1.vb dosyasına sağ tıklayın, Yeniden Adlandır'ı seçin ve dosyayı Sınıf1'denISampleInterface olarak yeniden adlandırın. Sınıfı ISampleInterfaceda olarak yeniden adlandırmak için istemine Evet yanıtını verin. Bu sınıf, sınıfı için ortak arabirimi temsil eder.

  5. Çözüm GezginitypeEquivalenceInterface projesine sağ tıklayın ve özellikler'i seçin.

  6. Özellikler ekranının sol bölmesinde Oluştur'u seçin ve Çıkış yolunu bilgisayarınızda C:\TypeEquivalenceSample gibi bir konuma ayarlayın. Bu kılavuz boyunca aynı konumu kullanacaksınız.

  7. Özellikler ekranının sol bölmesinde Derle>Tanımlayıcı adlandırma'yı seçin ve ardından Derlemeyi imzala onay kutusunu seçin. Tanımlayıcı ad anahtarı dosyasındaGözat'ı seçin.

  8. TypeEquivalenceInterface projesinde oluşturduğunuz key.snk dosyasına gidip dosyayı seçin ve ardından Tamam'ı seçin. Daha fazla bilgi için bkz. Ortak-özel anahtar çifti oluşturma.

  9. ISampleInterface sınıf dosyasını kod düzenleyicisinde açın ve arabirimini oluşturmak ISampleInterface için içeriğini aşağıdaki kodla değiştirin:

    using System;
    using System.Runtime.InteropServices;
    
    namespace TypeEquivalenceInterface
    {
        [ComImport]
        [Guid("8DA56996-A151-4136-B474-32784559F6DF")]
        public interface ISampleInterface
        {
            void GetUserInput();
            string UserInput { get; }
        }
    }
    
    Imports System.Runtime.InteropServices
    
    <ComImport()>
    <Guid("8DA56996-A151-4136-B474-32784559F6DF")>
    Public Interface ISampleInterface
        Sub GetUserInput()
        ReadOnly Property UserInput As String
    End Interface
    
  10. Araçlar menüsünde Guid Oluştur'u seçin ve GUID Oluştur iletişim kutusunda Kayıt Defteri Biçimi'ni seçin. Kopyala'yı ve ardından Çıkış'ı seçin.

  11. Kodunuzun özniteliğinde Guid örnek GUID değerini kopyaladığınız GUID ile değiştirin ve küme ayraçlarını ({ }) kaldırın.

  12. Çözüm GezginiÖzellikler klasörünü genişletin ve AssemblyInfo.cs veya AssemblyInfo.vb dosyasını seçin. Kod düzenleyicisinde dosyasına aşağıdaki özniteliği ekleyin:

    [assembly: ImportedFromTypeLib("")]
    
    <Assembly: ImportedFromTypeLib("")>
    
  13. Dosya>Tümünü Kaydet'i seçin veya dosyaları ve projeyi kaydetmek için Ctrl+Shift+S tuşlarına basın.

  14. Çözüm Gezgini'daTypeEquivalenceInterface projesine sağ tıklayın ve Oluştur'u seçin. Sınıf kitaplığı DLL dosyası derlenir ve belirtilen derleme çıkış yoluna kaydedilir, örneğin C:\TypeEquivalenceSample.

Çalışma zamanı sınıfı oluşturma

Ardından tür eşdeğerliği çalışma zamanı sınıfını oluşturun.

  1. Visual Studio'da Dosya>Yeni Proje'yi> seçin.

  2. Yeni proje oluştur iletişim kutusunda, Şablon ara kutusuna sınıf kitaplığı yazın. Listeden C# veya Visual Basic Sınıf Kitaplığı (.NET Framework) şablonunu ve ardından İleri'yi seçin.

  3. Yeni projenizi yapılandırın iletişim kutusundaki Proje adı'nın altına TypeEquivalenceRuntime yazıp Oluştur'u seçin. Yeni proje oluşturulur.

  4. Çözüm GezginiClass1.cs veya Class1.vb dosyasına sağ tıklayın, Yeniden Adlandır'ı seçin ve dosyayı Class1'denSampleClass olarak yeniden adlandırın. Sınıfı SampleClassda olarak yeniden adlandırmak için istemine Evet yanıtını verin. Bu sınıf arabirimini ISampleInterface uygular.

  5. Çözüm Gezgini'daTypeEquivalenceInterface projesine sağ tıklayın ve Özellikler'i seçin.

  6. Özellikler ekranının sol bölmesinde Oluştur'u seçin ve çıkış yolunuTypeEquivalenceInterface projesi için kullandığınız konuma ayarlayın; örneğin, C:\TypeEquivalenceSample.

  7. Özellikler ekranının sol bölmesinde Derle>Tanımlayıcı adlandırma'yı seçin ve ardından Derlemeyi imzala onay kutusunu seçin. Tanımlayıcı ad anahtarı dosyasındaGözat'ı seçin.

  8. TypeEquivalenceInterface projesinde oluşturduğunuz key.snk dosyasına gidip dosyayı seçin ve ardından Tamam'ı seçin. Daha fazla bilgi için bkz. Ortak-özel anahtar çifti oluşturma.

  9. Çözüm Gezgini'daTypeEquivalenceRuntime projesine sağ tıklayın veBaşvuruEkle'yi> seçin.

  10. Başvuru Yöneticisi iletişim kutusunda Gözat'ı seçin ve çıkış yolu klasörüne gidin. TypeEquivalenceInterface.dll dosyasını seçin, Ekle'yi ve ardından Tamam'ı seçin.

  11. Çözüm Gezgini'daBaşvurular klasörünü genişletin ve TypeEquivalenceInterface başvuruyu seçin. Özellikler bölmesinde, henüz değilse Belirli Sürüm'iFalse olarak ayarlayın.

  12. Kod düzenleyicisinde SampleClass sınıf dosyasını açın ve sınıfını oluşturmak SampleClass için içeriğini aşağıdaki kodla değiştirin:

    using System;
    using TypeEquivalenceInterface;
    
    namespace TypeEquivalenceRuntime
    {
        public class SampleClass : ISampleInterface
        {
            private string p_UserInput;
            public string UserInput { get { return p_UserInput; } }
    
            public void GetUserInput()
            {
                Console.WriteLine("Please enter a value:");
                p_UserInput = Console.ReadLine();
            }
        }
    }
    
    Imports TypeEquivalenceInterface
    
    Public Class SampleClass
        Implements ISampleInterface
    
        Private p_UserInput As String
        Public ReadOnly Property UserInput() As String Implements ISampleInterface.UserInput
            Get
                Return p_UserInput
            End Get
        End Property
    
        Public Sub GetUserInput() Implements ISampleInterface.GetUserInput
            Console.WriteLine("Please enter a value:")
            p_UserInput = Console.ReadLine()
        End Sub
    End Class
    
  13. Dosya>Tümünü Kaydet'i seçin veya dosyaları ve projeyi kaydetmek için Ctrl+Shift+S tuşlarına basın.

  14. Çözüm GezginitypeEquivalenceRuntime projesine sağ tıklayın ve Oluştur'u seçin. Sınıf kitaplığı DLL dosyası derlenip belirtilen derleme çıkış yoluna kaydedilir.

İstemci projesi oluşturma

Son olarak, arabirim derlemesine başvuran bir tür eşdeğerliği istemci programı oluşturun.

  1. Visual Studio'da Dosya>Yeni Proje'yi> seçin.

  2. Yeni proje oluştur iletişim kutusunda, Şablon ara kutusuna konsol yazın. Listeden C# veya Visual Basic Konsol Uygulaması (.NET Framework) şablonunu ve ardından İleri'yi seçin.

  3. Yeni projenizi yapılandırın iletişim kutusundaki Proje adı'nın altına TypeEquivalenceClient yazın ve Oluştur'u seçin. Yeni proje oluşturulur.

  4. Çözüm GezginitypeEquivalenceClient projesine sağ tıklayın ve Özellikler'i seçin.

  5. Özellikler ekranının sol bölmesinde Oluştur'u seçin ve çıkış yolunu TypeEquivalenceInterface projesi için kullandığınız konuma ayarlayın; örneğin, C:\TypeEquivalenceSample.

  6. Çözüm Gezgini'daTypeEquivalenceClient projesine sağ tıklayın veBaşvuruEkle'yi> seçin.

  7. Başvuru Yöneticisi iletişim kutusunda ,TypeEquivalenceInterface.dll dosyası zaten listelenmişse seçin. Yoksa Gözat'ı seçin, çıkış yolu klasörüne gidin, TypeEquivalenceInterface.dll dosyasını ( TypeEquivalenceRuntime.dlldeğil) seçin ve Ekle'yi seçin. Tamam’ı seçin.

  8. Çözüm Gezgini'daBaşvurular klasörünü genişletin ve TypeEquivalenceInterface başvuruyu seçin. Özellikler bölmesinde Birlikte Çalışma Türlerini Ekle'yiTrue olarak ayarlayın.

  9. Kod düzenleyicisinde Program.cs veya Module1.vb dosyasını açın ve istemci programını oluşturmak için içeriğini aşağıdaki kodla değiştirin:

    using System;
    using System.Reflection;
    using TypeEquivalenceInterface;
    
    namespace TypeEquivalenceClient
    {
        class Program
        {
            static void Main(string[] args)
            {
                Assembly sampleAssembly = Assembly.Load("TypeEquivalenceRuntime");
                ISampleInterface sampleClass =
                    (ISampleInterface)sampleAssembly.CreateInstance("TypeEquivalenceRuntime.SampleClass");
                sampleClass.GetUserInput();
                Console.WriteLine(sampleClass.UserInput);
                Console.WriteLine(sampleAssembly.GetName().Version.ToString());
                Console.ReadLine();
            }
        }
    }
    
    Imports System.Reflection
    Imports TypeEquivalenceInterface
    
    Module Module1
    
        Sub Main()
            Dim sampleAssembly = Assembly.Load("TypeEquivalenceRuntime")
            Dim sampleClass As ISampleInterface = CType( _
                sampleAssembly.CreateInstance("TypeEquivalenceRuntime.SampleClass"), ISampleInterface)
            sampleClass.GetUserInput()
            Console.WriteLine(sampleClass.UserInput)
            Console.WriteLine(sampleAssembly.GetName().Version)
            Console.ReadLine()
        End Sub
    
    End Module
    
  10. Dosya>Tümünü Kaydet'i seçin veya dosyaları ve projeyi kaydetmek için Ctrl+Shift+S tuşlarına basın.

  11. Programı derlemekve çalıştırmak için Ctrl +F5 tuşlarına basın. Konsol çıkışının 1.0.0.0 derleme sürümünü döndürdüğünü unutmayın.

Arabirimi değiştirme

Şimdi arabirim derlemesini değiştirin ve sürümünü değiştirin.

  1. Visual Studio'da Dosya>Proje/ÇözümAç'ı> seçin ve TypeEquivalenceInterface projesini açın.

  2. Çözüm Gezgini'daTypeEquivalenceInterface projesine sağ tıklayın ve Özellikler'i seçin.

  3. Özellikler ekranının sol bölmesinde Uygulama'yı ve ardından Derleme Bilgileri'ni seçin.

  4. Derleme Bilgileri iletişim kutusunda Derleme sürümü ve Dosya sürümü değerlerini 2.0.0.0 olarak değiştirip Tamam'ı seçin.

  5. SampleInterface.cs veya SampleInterface.vb dosyasını açın ve arabirimine ISampleInterface aşağıdaki kod satırını ekleyin:

    DateTime GetDate();
    
    Function GetDate() As Date
    
  6. Dosya>Tümünü Kaydet'i seçin veya dosyaları ve projeyi kaydetmek için Ctrl+Shift+S tuşlarına basın.

  7. Çözüm Gezgini'daTypeEquivalenceInterface projesine sağ tıklayın ve Oluştur'u seçin. Sınıf kitaplığı DLL dosyasının yeni bir sürümü derlenip derleme çıkış yoluna kaydedilir.

Çalışma zamanı sınıfını değiştirme

Ayrıca çalışma zamanı sınıfını değiştirin ve sürümünü güncelleştirin.

  1. Visual Studio'da Dosya>Proje/ÇözümAç'ı> seçin ve TypeEquivalenceRuntime projesini açın.

  2. Çözüm GezginitypeEquivalenceRuntime projesine sağ tıklayın ve Özellikler'i seçin.

  3. Özellikler ekranının sol bölmesinde Uygulama'yı ve ardından Derleme Bilgileri'ni seçin.

  4. Derleme Bilgileri iletişim kutusunda Derleme sürümü ve Dosya sürümü değerlerini 2.0.0.0 olarak değiştirip Tamam'ı seçin.

  5. SampleClass.cs veya SampleClass.vb dosyasını açın ve sınıfına SampleClass aşağıdaki kodu ekleyin:

     public DateTime GetDate()
     {
         return DateTime.Now;
     }
    
    Public Function GetDate() As DateTime Implements ISampleInterface.GetDate
        Return Now
    End Function
    
  6. Dosya>Tümünü Kaydet'i seçin veya dosyaları ve projeyi kaydetmek için Ctrl+Shift+S tuşlarına basın.

  7. Çözüm GezginitypeEquivalenceRuntime projesine sağ tıklayın ve Oluştur'u seçin. Sınıf kitaplığı DLL dosyasının yeni bir sürümü derlenip derleme çıkış yoluna kaydedilir.

Güncelleştirilmiş istemci programını çalıştırma

Derleme çıkış klasörü konumuna gidin ve TypeEquivalenceClient.exeçalıştırın. Konsol çıkışının artık program yeniden derlenmeden derlemenin TypeEquivalenceRuntime yeni sürümünü ( 2.0.0.0) yansıttığını unutmayın.

Ayrıca bkz.