Sdílet prostřednictvím


Návod: Vložení typů ze spravovaných sestavení v sadě Visual Studio

Pokud vložíte informace o typu ze spravovaného sestavení se silným názvem, můžete v aplikaci volně párovat typy, abyste dosáhli nezávislosti verzí. To znamená, že váš program může být napsán tak, aby používal typy z libovolné verze spravované knihovny, aniž by se musel znovu kompilovat pro každou novou verzi.

Vkládání typů se často používá s interopem MODELU COM, jako je například aplikace, která používá objekty automatizace z Microsoft Office. Informace o typu vložení umožňují stejnému sestavení aplikace pracovat s různými verzemi Microsoft Office na různých počítačích. Můžete ale také použít vkládání typů s plně spravovanými řešeními.

Po zadání veřejných rozhraní, která mohou být vložena, vytvoříte třídy modulu runtime, které implementují tato rozhraní. Klientský program může vložit informace o typu rozhraní v době návrhu odkazováním na sestavení, které obsahuje veřejná rozhraní a nastavením Embed Interop Types vlastnosti odkazu na True. Klientský program pak může načíst instance objektů modulu runtime zadaných jako tato rozhraní. To je ekvivalent použití kompilátoru příkazového řádku a odkazování na sestavení pomocí možnosti EmbedInteropTypes kompilátoru.

Pokud vytvoříte novou verzi sestavení modulu runtime se silným názvem, klientský program není nutné znovu zkompilovat. Klientský program nadále používá jakoukoli verzi sestavení modulu runtime, která je pro něj k dispozici, pomocí informací o vložených typech pro veřejná rozhraní.

V tomto názorném postupu:

  1. Vytvořte sestavení se silným názvem s veřejným rozhraním obsahujícím informace o typu, které lze vložit.
  2. Vytvořte sestavení modulu runtime se silným názvem, které implementuje veřejné rozhraní.
  3. Vytvořte klientský program, který vloží informace o typu z veřejného rozhraní a vytvoří instanci třídy ze sestavení modulu runtime.
  4. Upravte a znovu vytvořte sestavení modulu runtime.
  5. Spusťte klientský program, abyste zjistili, že používá novou verzi sestavení modulu runtime, aniž by bylo nutné znovu zkompilovat.

Poznámka

Váš počítač může v následujících pokynech zobrazovat odlišné názvy nebo umístění některých prvků uživatelského rozhraní sady Visual Studio. Tyto prvky jsou určeny edicí sady Visual Studio a použitým nastavením. Další informace najdete v tématu Přizpůsobení integrovaného vývojového prostředí (IDE).

Podmínky a omezení

Informace o typu můžete vložit ze sestavení za následujících podmínek:

  • Sestavení zveřejňuje alespoň jedno veřejné rozhraní.
  • Vložená rozhraní jsou opatřena poznámkami s ComImport atributy a Guid atributy s jedinečnými identifikátory GUID.
  • Sestavení je opatřeno poznámkami atributem ImportedFromTypeLib nebo atributem PrimaryInteropAssembly a atributem na úrovni Guid sestavení. Šablony projektů Visual C# a Visual Basic ve výchozím nastavení obsahují atribut na úrovni Guid sestavení.

Vzhledem k tomu, že primární funkcí vkládání typu je podpora sestavení zprostředkovatele com, platí při vkládání informací o typu do plně spravovaného řešení následující omezení:

  • Vloženy jsou pouze atributy specifické pro zprostředkovatele COM. Ostatní atributy jsou ignorovány.
  • Pokud typ používá obecné parametry a typ obecného parametru je vložený typ, nelze tento typ použít přes hranice sestavení. Příklady překročení hranice sestavení zahrnují volání metody z jiného sestavení nebo odvození typu z typu definovaného v jiném sestavení.
  • Konstanty nejsou vloženy.
  • Třída System.Collections.Generic.Dictionary<TKey,TValue> nepodporuje vložený typ jako klíč. Můžete implementovat vlastní typ slovníku, který podporuje vložený typ jako klíč.

Vytvoření rozhraní

Prvním krokem je vytvoření sestavení rozhraní ekvivalence typů.

  1. V sadě Visual Studio vyberte Soubor>nový>projekt.

  2. V dialogovém okně Vytvořit nový projekt zadejte do pole Hledat šablonyknihovnu tříd. V seznamu vyberte šablonu C# nebo Visual Basic Class Library (.NET Framework) a pak vyberte Další.

  3. V dialogovém okně Konfigurace nového projektu zadejte do pole Název projektutext TypeEquivalenceInterface a pak vyberte Vytvořit. Vytvoří se nový projekt.

  4. V Průzkumník řešení klikněte pravým tlačítkem na soubor Class1.cs nebo Class1.vb, vyberte Přejmenovat a přejmenujte soubor z Class1 na ISampleInterface. Na výzvu k přejmenování třídy ISampleInterfacena . Tato třída představuje veřejné rozhraní pro třídu.

  5. V Průzkumník řešení klikněte pravým tlačítkem na projekt TypeEquivalenceInterface a pak vyberte Vlastnosti.

  6. V levém podokně obrazovky Vlastnosti vyberte Sestavit a nastavte výstupní cestu na umístění v počítači, například C:\TypeEquivalenceSample. V tomto názorném postupu použijete stejné umístění.

  7. V levém podokně obrazovky Vlastnosti vyberte Vytvořit>silné pojmenování a pak zaškrtněte políčko Podepsat sestavení. V souboru klíče silného názvu vyberte Procházet.

  8. Přejděte na a vyberte soubor key.snk, který jste vytvořili v projektu TypeEquivalenceInterface , a pak vyberte OK. Další informace najdete v tématu Vytvoření páru veřejného a privátního klíče.

  9. Otevřete soubor třídy ISampleInterface v editoru kódu a nahraďte jeho obsah následujícím kódem pro vytvoření ISampleInterface rozhraní:

    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. V nabídce Nástroje vyberte Vytvořit identifikátor GUID a v dialogovém okně Vytvořit identifikátor GUID vyberte Formát registru. Vyberte Kopírovat a pak vyberte Ukončit.

  11. V atributu Guid kódu nahraďte ukázkový identifikátor GUID identifikátorem GUID, který jste zkopírovali, a odeberte složené závorky ({ }).

  12. V Průzkumník řešení rozbalte složku Vlastnosti a vyberte soubor AssemblyInfo.cs nebo AssemblyInfo.vb. V editoru kódu přidejte do souboru následující atribut:

    [assembly: ImportedFromTypeLib("")]
    
    <Assembly: ImportedFromTypeLib("")>
    
  13. Vyberte Soubor>Uložit vše nebo stisknutím klávesy Ctrl+Shift+S uložte soubory a projekt.

  14. V Průzkumník řešení klikněte pravým tlačítkem na projekt TypeEquivalenceInterface a vyberte Sestavit. Soubor DLL knihovny tříd je zkompilován a uložen do zadané výstupní cesty sestavení, například C:\TypeEquivalenceSample.

Vytvoření třídy modulu runtime

Dále vytvořte třídu modulu runtime pro ekvivalenci typu.

  1. V sadě Visual Studio vyberte Soubor>nový>projekt.

  2. V dialogovém okně Vytvořit nový projekt zadejte do pole Hledat šablonyknihovnu tříd. V seznamu vyberte šablonu C# nebo Visual Basic Class Library (.NET Framework) a pak vyberte Další.

  3. V dialogovém okně Konfigurovat nový projekt zadejte do pole Název projektuTypeEquivalenceRuntime a pak vyberte Vytvořit. Vytvoří se nový projekt.

  4. V Průzkumník řešení klikněte pravým tlačítkem na soubor Class1.cs nebo Class1.vb, vyberte Přejmenovat a přejmenujte soubor z Třídy 1 na SampleClass. Na výzvu k přejmenování třídy SampleClassna . Tato třída implementuje ISampleInterface rozhraní.

  5. V Průzkumník řešení klikněte pravým tlačítkem na projekt TypeEquivalenceInterface a vyberte Vlastnosti.

  6. V levém podokně obrazovky Vlastnosti vyberte Sestavit a potom nastavte výstupní cestu na stejné místo, které jste použili pro projekt TypeEquivalenceInterface, například C:\TypeEquivalenceSample.

  7. V levém podokně obrazovky Vlastnosti vyberte Vytvořit>silné pojmenování a pak zaškrtněte políčko Podepsat sestavení. V souboru klíče silného názvu vyberte Procházet.

  8. Přejděte na a vyberte soubor key.snk, který jste vytvořili v projektu TypeEquivalenceInterface , a pak vyberte OK. Další informace najdete v tématu Vytvoření páru veřejného a privátního klíče.

  9. V Průzkumník řešení klikněte pravým tlačítkem na projekt TypeEquivalenceRuntime a vyberte Přidat>odkaz.

  10. V dialogovém okně Správce odkazů vyberte Procházet a přejděte do složky výstupní cesty. Vyberte souborTypeEquivalenceInterface.dll , vyberte Přidat a pak vyberte OK.

  11. V Průzkumník řešení rozbalte složku Reference a vyberte odkaz TypeEquivalenceInterface. V podokně Vlastnosti nastavte specifickou verzi na Hodnotu False , pokud ještě není.

  12. Otevřete soubor třídy SampleClass v editoru kódu a nahraďte jeho obsah následujícím kódem pro vytvoření SampleClass třídy:

    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. Vyberte Soubor>Uložit vše nebo stisknutím klávesy Ctrl+Shift+S uložte soubory a projekt.

  14. V Průzkumník řešení klikněte pravým tlačítkem na projekt TypeEquivalenceRuntime a vyberte Sestavit. Soubor dll knihovny tříd je zkompilován a uložen do zadané výstupní cesty sestavení.

Vytvoření klientského projektu

Nakonec vytvořte klientský program pro ekvivalenci typů, který odkazuje na sestavení rozhraní.

  1. V sadě Visual Studio vyberte Soubor>nový>projekt.

  2. V dialogovém okně Vytvořit nový projekt zadejte konzolu do pole Hledat šablony . V seznamu vyberte šablonu Konzolová aplikace jazyka C# nebo Visual Basic (.NET Framework) a pak vyberte Další.

  3. V dialogovém okně Konfigurace nového projektu zadejte do pole Název projektuTypEquivalenceClient a pak vyberte Vytvořit. Vytvoří se nový projekt.

  4. V Průzkumník řešení klikněte pravým tlačítkem na projekt TypeEquivalenceClient a vyberte Vlastnosti.

  5. V levém podokně obrazovky Vlastnosti vyberte Sestavit a potom nastavte výstupní cestu na stejné místo, které jste použili pro projekt TypeEquivalenceInterface, například C:\TypeEquivalenceSample.

  6. V Průzkumník řešení klikněte pravým tlačítkem na projekt TypeEquivalenceClient a vyberte Přidat>odkaz.

  7. Pokud už je souborTypeEquivalenceInterface.dll v dialogovém okně Správce odkazů uvedený, vyberte ho. Pokud ne, vyberte Procházet, přejděte do složky výstupní cesty, vyberte souborTypeEquivalenceInterface.dll (ne TypeEquivalenceRuntime.dll) a vyberte Přidat. Vyberte OK.

  8. V Průzkumník řešení rozbalte složku Reference a vyberte odkaz TypeEquivalenceInterface. V podokně Vlastnosti nastavte Vložit typy zprostředkovatele komunikace na Hodnotu True.

  9. Otevřete soubor Program.cs nebo Module1.vb v editoru kódu a nahraďte jeho obsah následujícím kódem pro vytvoření klientského programu:

    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. Vyberte Soubor>Uložit vše nebo stisknutím klávesy Ctrl+Shift+S uložte soubory a projekt.

  11. Stisknutím kláves Ctrl+F5 sestavte a spusťte program. Všimněte si, že výstup konzoly vrátí verzi sestavení 1.0.0.0.

Úprava rozhraní

Nyní upravte sestavení rozhraní a změňte jeho verzi.

  1. V sadě Visual Studio vyberte Soubor>Otevřít>projekt/řešení a otevřete projekt TypeEquivalenceInterface .

  2. V Průzkumník řešení klikněte pravým tlačítkem na projekt TypeEquivalenceInterface a vyberte Vlastnosti.

  3. V levém podokně obrazovky Vlastnosti vyberte Aplikace a pak vyberte Informace o sestavení.

  4. V dialogovém okně Informace o sestavení změňte hodnoty Assembly version (Verze sestavení ) a File version (Verze souboru ) na 2.0.0.0 a pak vyberte OK.

  5. Otevřete soubor SampleInterface.cs nebo SampleInterface.vb a přidejte do ISampleInterface rozhraní následující řádek kódu:

    DateTime GetDate();
    
    Function GetDate() As Date
    
  6. Vyberte Soubor>Uložit vše nebo stisknutím klávesy Ctrl+Shift+S uložte soubory a projekt.

  7. V Průzkumník řešení klikněte pravým tlačítkem na projekt TypeEquivalenceInterface a vyberte Sestavit. Je zkompilována nová verze souboru DLL knihovny tříd a uložena do výstupní cesty sestavení.

Úprava třídy modulu runtime

Upravte také třídu modulu runtime a aktualizujte její verzi.

  1. V sadě Visual Studio vyberte Soubor>Otevřít>projekt nebo řešení a otevřete projekt TypeEquivalenceRuntime .

  2. V Průzkumník řešení klikněte pravým tlačítkem na projekt TypeEquivalenceRuntime a vyberte Vlastnosti.

  3. V levém podokně obrazovky Vlastnosti vyberte Aplikace a pak vyberte Informace o sestavení.

  4. V dialogovém okně Informace o sestavení změňte hodnoty Assembly version (Verze sestavení ) a File version (Verze souboru ) na 2.0.0.0 a pak vyberte OK.

  5. Otevřete soubor SampleClass.cs nebo SampleClass.vb a přidejte do SampleClass třídy následující kód:

     public DateTime GetDate()
     {
         return DateTime.Now;
     }
    
    Public Function GetDate() As DateTime Implements ISampleInterface.GetDate
        Return Now
    End Function
    
  6. Vyberte Soubor>Uložit vše nebo stisknutím klávesy Ctrl+Shift+S uložte soubory a projekt.

  7. V Průzkumník řešení klikněte pravým tlačítkem na projekt TypeEquivalenceRuntime a vyberte Sestavit. Je zkompilována nová verze souboru DLL knihovny tříd a uložena do výstupní cesty sestavení.

Spuštění aktualizovaného klientského programu

Přejděte do umístění výstupní složky sestavení a spusťte TypeEquivalenceClient.exe. Všimněte si, že výstup konzoly nyní odráží novou verzi TypeEquivalenceRuntime sestavení 2.0.0.0, aniž by byl program překompilován.

Viz také