Udostępnij za pośrednictwem


Wskazówki: osadzanie typów z zarządzanych zestawów (C# i Visual Basic)

Po osadzeniu informacji typu z silną nazwą zestawu zarządzanych luźno można połączyć typów w aplikacji do osiągnięcia niezależności wersji.Oznacza to, że program mogą być zapisywane na używać wielu wersji zarządzane biblioteki typów bez konieczności ponownie skompilowana dla każdej wersji.

Osadzanie typu często jest używany com. jak aplikację, która korzysta z pakietu Microsoft Office obiekty automatyzacji.Osadzanie informacji typu umożliwia budowanie samego programu do pracy z różnymi wersjami pakietu Microsoft Office na różnych komputerach.Jednak można użyć typu osadzanie roztworem pełni zarządzany.

Wpisz informacje mogą być osadzone z zestawu, który ma następujące cechy:

  • Zgromadzenie udostępnia przynajmniej jeden interfejs publiczny.

  • Interfejsy osadzone są oznaczone ComImport atrybutu i Guid atrybutu (i unikatowy identyfikator GUID).

  • Zgromadzenie jest odnotowany z ImportedFromTypeLib atrybutu lub PrimaryInteropAssembly atrybut i poziomie zestawu Guid atrybut.(Domyślnie szablony projektu Visual Basic i Visual C# zawiera poziomie zestawu Guid atrybut.)

Po określeniu interfejsów publicznych, które mogą być osadzone można utworzyć uruchomieniowy, które implementują te interfejsy.Program kliencki następnie osadź wpisz informacje dotyczące tych interfejsów w czasie projektowania przez odwołanie do zestawu zawierającego interfejsów publicznych i ustawienie Embed Interop Types odwołanie do właściwości True.Jest to równoważne użyciu kompilatora wiersza polecenia i odwołanie do zestawu przy użyciu /link opcję kompilatora.Program kliencki można następnie załadować wystąpień obiektów runtime wpisana jako tych interfejsów.Jeśli tworzysz nową wersję na zestaw o silnej nazwie runtime program klienta nie ma ponownie skompilowana z zgromadzenie zaktualizowanych runtime.Zamiast tego program klienta nadal używać, zależnie od zestawu runtime jest dostępna wersja, przy użyciu informacji osadzonych typu dla interfejsów publicznych.

Ponieważ jest podstawową funkcją osadzanie typu obsługują osadzanie informacji typu COM zestawy międzyoperacyjne, osadzenia wpisz informacje w pełni zarządzane roztwór obowiązują następujące ograniczenia:

  • Tylko atrybuty specyficzne dla współdziałania z modelem COM są osadzone; inne atrybuty są ignorowane.

  • Jeśli typ parametru rodzajowego jest osadzony typ typu używa parametry rodzajowe, tego typu nie można używać granice zestawu.Przekraczanie granicy zestawu przykłady wywoływanie metody z innego zestawu lub typu wynikające z typu zdefiniowanych w innym zestawie.

  • Stałe nie są osadzone.

  • Dictionary Klasa nie obsługuje typu osadzony jako klucz.Można zaimplementować typu własny słownik do obsługi osadzony typ, jako klucz.

W tym instruktażu będą wykonaj następujące czynności:

  • Utworzyć zestaw o silnej nazwie z interfejsem publicznych, zawierający informacje typu mogą być osadzone.

  • Utworzyć zestaw o silnej nazwie runtime, która implementuje ten interfejs publiczny.

  • Utwórz program klienta, który osadza informacje typu z interfejsu publicznego i tworzy instancję klasy z zestawu runtime.

  • Modyfikowanie i przebudować zestawu runtime.

  • Uruchom program klienta, aby zobaczyć, czy nowa wersja zestawu runtime jest używana bez konieczności ponownie skompilować program klienta.

[!UWAGA]

Na komputerze w poniższych instrukcjach mogą być wyświetlane inne nazwy i lokalizacje niektórych elementów interfejsu użytkownika programu Visual Studio. Te elementy są określane przez numer wersji Visual Studio oraz twoje ustawienia. Aby uzyskać więcej informacji, zobacz Dostosowywanie ustawień środowiska deweloperskiego w Visual Studio.

Tworzenie interfejsu

Aby utworzyć projekt typu równoważności interfejsu

  1. W Visual Studio, z pliku menu, wskaż Nowy i kliknij przycisk projektu.

  2. W Nowy projekt dialogowym Typów projektów okienka, upewnij się, że Windows jest zaznaczone.Wybierz Biblioteka klas w szablonów okienka.W Nazwa wpisz TypeEquivalenceInterface, a następnie kliknij przycisk OK.Tworzenia nowego projektu.

  3. W Solution Explorer, kliknij prawym przyciskiem myszy plik Class1.vb lub klasa Class1.cs została automatycznie i kliknij przycisk zmienić.Zmień nazwę pliku do ISampleInterface.vb lub ISampleInterface.cs i naciśnij klawisz ENTER.Zmiana nazwy pliku także zmieni nazwę klasy do ISampleInterface.Ta klasa reprezentuje interfejsu publicznego dla klasy.

  4. Kliknij prawym przyciskiem myszy projekt TypeEquivalenceInterface i kliknij przycisk Właściwości.Kliknij skompilować kartę w Visual Basic lub budować kartę w Visual C#.Ustawianie ścieżki wyjściowej do prawidłowej lokalizacji na komputerze rozwoju takich jak C:\TypeEquivalenceSample.Ta lokalizacja będzie również w późniejszym etapie, w tym instruktażu.

  5. Podczas edycji nadal właściwości projektu, kliknij przycisk podpisywania kartę.Wybierz podpisuje zestaw z opcji.W Wybierz plik klucza silnej nazwy kliknij < nowy... >.W Nazwa pliku klucza wpisz key.snk.Wyczyść Ochrona hasłem pliku klucza pole wyboru.Click OK.

  6. Otwórz plik ISampleInterface.vb lub ISampleInterface.cs.Dodaj następujący kod do pliku klasy ISampleInterface, aby utworzyć interfejsu ISampleInterface.

    Imports System.Runtime.InteropServices
    
    <ComImport()>
    <Guid("8DA56996-A151-4136-B474-32784559F6DF")>
    Public Interface ISampleInterface
        Sub GetUserInput()
        ReadOnly Property UserInput As String
    
    
    ...
    
    
    End Interface
    
    using System;
    using System.Runtime.InteropServices;
    
    namespace TypeEquivalenceInterface
    {
        [ComImport]
        [Guid("8DA56996-A151-4136-B474-32784559F6DF")]
        public interface ISampleInterface
        {
            void GetUserInput();
            string UserInput { get; }
    
    
    ...
    
    
        }
    }
    
  7. Na Narzędzia menu, kliknij Utwórz identyfikator Guid.W Utwórz identyfikator GUID okno dialogowe, kliknij Format rejestru i kliknij przycisk kopię.Kliknij wyjścia.

  8. W Guid atrybutu, Usuń próbkę GUID i Wklej skopiowany z identyfikatora GUID Utwórz identyfikator GUID okno dialogowe.Usuń nawiasy klamrowe ({}) z skopiowane identyfikatora GUID.

  9. W Visual Basic, z projektu menu, kliknij Pokaż wszystkie pliki.Pomiń ten krok, jeśli używasz Visual C#.

  10. W Solution Explorer, rozwiń węzeł Mój projekt folder, jeśli używasz Visual Basic.Rozwiń Właściwości folder, jeśli używasz Visual C#.Kliknij dwukrotnie plik AssemblyInfo.vb lub AssemblyInfo.cs.Dodaj następujący atrybut w pliku.

    <Assembly: ImportedFromTypeLib("")> 
    
    [assembly: ImportedFromTypeLib("")]
    

    Zapisz plik.

  11. Zapisz projekt.

  12. Kliknij prawym przyciskiem myszy projekt TypeEquivalenceInterface i kliknij przycisk budować.Plik klasy biblioteki DLL jest skompilowany i zapisany do kompilacji określonej ścieżki wyjściowej (na przykład C:\TypeEquivalenceSample).

Tworzenie klasy Runtime

Aby utworzyć projekt typu równoważności runtime

  1. W Visual Studio, z pliku menu, wskaż Nowy i kliknij przycisk projektu.

  2. W Nowy projekt dialogowym Typów projektów okienka, upewnij się, że Windows jest zaznaczone.Wybierz Biblioteka klas w szablonów okienka.W Nazwa wpisz TypeEquivalenceRuntime, a następnie kliknij przycisk OK.Tworzenia nowego projektu.

  3. W Solution Explorer, kliknij prawym przyciskiem myszy plik Class1.vb lub klasa Class1.cs została automatycznie i kliknij przycisk zmienić.Zmień nazwę pliku do SampleClass.vb lub SampleClass.cs i naciśnij klawisz ENTER.Zmiana nazwy pliku także zmienia nazwę klasy do SampleClass.Wprowadzi w życie tej klasy ISampleInterface interfejsu.

  4. Kliknij prawym przyciskiem myszy projekt TypeEquivalenceRuntime i kliknij przycisk Właściwości.Kliknij skompilować kartę w Visual Basic lub budować kartę w Visual C#.Ustawianie ścieżki wyjściowej do tej samej lokalizacji, na przykład używane w projekcie TypeEquivalenceInterface C:\TypeEquivalenceSample.

  5. Podczas edycji nadal właściwości projektu, kliknij przycisk podpisywania kartę.Wybierz podpisuje zestaw z opcji.W Wybierz plik klucza silnej nazwy kliknij < nowy... >.W Nazwa pliku klucza wpisz key.snk.Wyczyść Ochrona hasłem pliku klucza pole wyboru.Click OK.

  6. Kliknij prawym przyciskiem myszy projekt TypeEquivalenceRuntime i kliknij przycisk Dodaj odwołanie.Kliknij Przeglądaj kartę i przejdź do folderu Ścieżka wyjściowego.Zaznacz plik TypeEquivalenceInterface.dll i kliknij przycisk OK.

  7. W Visual Basic, z projektu menu, kliknij Pokaż wszystkie pliki.Pomiń ten krok, jeśli używasz Visual C#.

  8. W Solution Explorer, rozwiń węzeł odniesienia folder.Zaznacz odwołanie TypeEquivalenceInterface.W oknie właściwości dla odwołania TypeEquivalenceInterface Określonej wersji właściwość, aby False.

  9. Dodaj następujący kod do pliku klasy SampleClass, aby utworzyć klasy SampleClass.

    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
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    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();
            }
    
    
    ...
    
    
        }
    }
    
  10. Zapisz projekt.

  11. Kliknij prawym przyciskiem myszy projekt TypeEquivalenceRuntime i kliknij przycisk budować.Plik klasy biblioteki DLL jest skompilowany i zapisany do kompilacji określonej ścieżki wyjściowej (na przykład C:\TypeEquivalenceSample).

Tworzenie projektu klienta

Aby utworzyć projekt typu równoważności klienta

  1. W Visual Studio, z pliku menu, wskaż Nowy i kliknij przycisk projektu.

  2. W Nowy projekt dialogowym Typów projektów okienka, upewnij się, że Windows jest zaznaczone.Wybierz Aplikacji konsoli w szablonów okienka.W Nazwa wpisz TypeEquivalenceClient, a następnie kliknij przycisk OK.Tworzenia nowego projektu.

  3. Kliknij prawym przyciskiem myszy projekt TypeEquivalenceClient i kliknij przycisk Właściwości.Kliknij skompilować kartę w Visual Basic lub budować kartę w Visual C#.Ustawianie ścieżki wyjściowej do tej samej lokalizacji, na przykład używane w projekcie TypeEquivalenceInterface C:\TypeEquivalenceSample.

  4. Kliknij prawym przyciskiem myszy projekt TypeEquivalenceClient i kliknij przycisk Dodaj odwołanie.Kliknij Przeglądaj kartę i przejdź do folderu Ścieżka wyjściowego.Zaznacz plik TypeEquivalenceInterface.dll (nie TypeEquivalenceRuntime.dll) i kliknij przycisk OK.

  5. W Visual Basic, z projektu menu, kliknij Pokaż wszystkie pliki.Pomiń ten krok, jeśli używasz Visual C#.

  6. W Solution Explorer, rozwiń węzeł odniesienia folder.Zaznacz odwołanie TypeEquivalenceInterface.W oknie właściwości dla odwołania TypeEquivalenceInterface Osadzić typy współdziałania z modelem właściwość, aby True.

  7. Dodaj następujący kod do pliku Module1.vb lub pliku Program.cs utworzyć program klienta.

    Imports TypeEquivalenceInterface
    Imports System.Reflection
    
    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
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using TypeEquivalenceInterface;
    using System.Reflection;
    
    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();
            }
        }
    }
    
  8. Naciśnij klawisze CTRL + F5, aby skompilować i uruchomić program.

Modyfikowanie interfejsu

Aby zmodyfikować interfejs

  1. W Visual Studio, z pliku menu, wskaż Otwórz, a następnie kliknij przycisk Projektu/roztwór.

  2. W Otwórz projekt okno dialogowe, kliknij prawym przyciskiem myszy projekt TypeEquivalenceInterface, a następnie kliknij Właściwości.Kliknij aplikacji kartę.Kliknij Informacji O zestawie przycisku.Zmień Wersji zestawu i Wersja pliku wartości do 2.0.0.0.

  3. Otwórz plik ISampleInterface.vb lub ISampleInterface.cs.Dodaj następujący wiersz kodu interfejsu ISampleInterface.

    Function GetDate() As Date
    
    DateTime GetDate();
    

    Zapisz plik.

  4. Zapisz projekt.

  5. Kliknij prawym przyciskiem myszy projekt TypeEquivalenceInterface i kliknij przycisk budować.Nowa wersja pliku klasy biblioteki DLL jest skompilowany i zapisywane w kompilacji określonej ścieżki wyjściowej (na przykład C:\TypeEquivalenceSample).

Modyfikowanie klasy Runtime

Aby zmodyfikować klasy runtime

  1. W Visual Studio, z pliku menu, wskaż Otwórz, a następnie kliknij przycisk Projektu/roztwór.

  2. W Otwórz projekt okno dialogowe, kliknij prawym przyciskiem myszy projekt TypeEquivalenceRuntime a kliknij przycisk Właściwości.Kliknij aplikacji kartę.Kliknij Informacji O zestawie przycisku.Zmień Wersji zestawu i Wersja pliku wartości do 2.0.0.0.

  3. Otwórz plik SampleClass.vb lub SampleClass.cs.Dodaj następujące wiersze kodu do klasy SampleClass.

    Public Function GetDate() As DateTime Implements ISampleInterface.GetDate
        Return Now
    End Function
    
    public DateTime GetDate()
    {
        return DateTime.Now;
    }
    

    Zapisz plik.

  4. Zapisz projekt.

  5. Kliknij prawym przyciskiem myszy projekt TypeEquivalenceRuntime i kliknij przycisk budować.Zaktualizowana wersja pliku klasy biblioteki DLL jest skompilowany i zapisywane w kompilacji uprzednio określonej ścieżki wyjściowej (na przykład C:\TypeEquivalenceSample).

  6. W Eksploratorze pliku Otwórz folder Ścieżka wyjściowego (na przykład C:\TypeEquivalenceSample).Kliknij dwukrotnie TypeEquivalenceClient.exe, aby uruchomić program.Program będzie odzwierciedlał nową wersję zestawu TypeEquivalenceRuntime bez posiadające została skompilowana.

Zobacz też

Informacje

/link (Visual Basic)

/link (opcje kompilatora C#)

Koncepcje

Przewodnik programowania w języku C#

Inne zasoby

Przewodnik programowania w Visual Basic

Programowanie za pomocą zestawów