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 volně kombinovat typy v aplikaci, aby se dosáhlo nezávislosti verzí. To znamená, že program může být napsán tak, aby používal typy z jakékoli verze spravované knihovny, aniž by bylo nutné znovu kompilovat pro každou novou verzi.

Vkládání typů se často používá u zprostředkovatele komunikace s objekty COM, jako je například aplikace, která používá automatizační objekty z Microsoft Office. vložení informací o typu umožňuje stejné sestavení programu pracovat s různými verzemi Microsoft Office v 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 pro rozhraní v době návrhu, a to tak, že odkazuje na sestavení, které obsahuje veřejná rozhraní a nastavuje Embed Interop Types vlastnost odkazu na True . Klientský program pak může načíst instance objektů za běhu, které jsou zadány jako tato rozhraní. To je ekvivalentní použití kompilátoru příkazového řádku a odkazování na sestavení pomocí Možnosti kompilátoru EmbedInteropTypes.

Vytvoříte-li novou verzi sestavení modulu runtime se silným názvem, klientský program nebude nutné znovu kompilovat. Klientský program nadále používá, je-li k dispozici verze sestavení modulu runtime, používá informace vloženého typu pro veřejná rozhraní.

V tomto návodu:

  1. Vytvořte sestavení se silným názvem pomocí veřejného rozhraní obsahujícího informace o typu, které mohou být vloženy.
  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 sestavte sestavení modulu runtime.
  5. Spusťte klientský program, aby bylo vidět, že používá novou verzi sestavení modulu runtime, aniž by bylo nutné znovu kompilovat.

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í

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

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

Vzhledem k tomu, že primární funkce vkládání typů je podpora sestavení COM interop, platí při vložení informací o typu do plně spravovaného řešení následující omezení:

  • Jsou vložené pouze atributy specifické pro zprostředkovatele komunikace s objekty COM. Ostatní atributy se ignorují.
  • Pokud typ používá obecné parametry a typ obecného parametru je vložený typ, tento typ nelze použít napříč hranicí sestavení. Příklady kříž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.
  • System.Collections.Generic.Dictionary<TKey,TValue>Třída nepodporuje vložený typ jako klíč. Můžete implementovat vlastní typ slovníku pro podporu vloženého typu jako klíče.

Vytvoření rozhraní

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

  1. v Visual Studio vyberte soubor > nový > Project.

  2. V dialogovém okně vytvořit nový projekt zadejte do pole Hledat šablony knihovnu tříd . v seznamu vyberte šablonu knihovna tříd (.NET Framework) C# nebo Visual Basic a pak vyberte další.

  3. v dialogovém okně konfigurovat nový projekt zadejte do pole Project název text TypeEquivalenceInterface a pak vyberte vytvořit. Vytvoří se nový projekt.

  4. V Průzkumník řešení klikněte pravým tlačítkem myši na soubor Class1. cs nebo Class1. vb , vyberte Přejmenovat a přejmenujte soubor z Class1 na ISampleInterface. Chcete-li také přejmenovat třídu na, odpovězte na výzvu Ano ISampleInterface . Tato třída reprezentuje veřejné rozhraní třídy.

  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 sestavovat a nastavte výstupní cestu k umístění v počítači, například C:\TypeEquivalenceSample. V rámci tohoto Názorného postupu použijete stejné umístění.

  7. V levém podokně obrazovky vlastnosti vyberte podepisování a zaškrtněte políčko podepsat sestavení . V rozevíracím seznamu pro Výběr souboru klíče se silným názvem vyberte možnost Nový.

  8. V dialogovém okně vytvořit klíč se silným názvem zadejte do pole název souboru klíče Key. snk. Zrušte zaškrtnutí políčka chránit soubor klíče heslem a pak vyberte OK.

  9. V editoru kódu otevřete soubor třídy ISampleInterface 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 možnost vytvořit GUID a v dialogovém okně vytvořit identifikátor GUID vyberte Formát registru. Vyberte možnost Kopírovat a pak vyberte možnost ukončit.

  11. V Guid atributu kódu nahraďte vzorový 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 Properties (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 stiskněte klávesovou zkratku CTRL + + SHIFT + s a uložte soubory a projekt.

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

Vytvoření běhové třídy

Dále vytvořte třídu prostředí runtime ekvivalenci typu.

  1. v Visual Studio vyberte soubor > nový > Project.

  2. V dialogovém okně vytvořit nový projekt zadejte do pole Hledat šablony knihovnu tříd . v seznamu vyberte šablonu knihovna tříd (.NET Framework) C# nebo Visual Basic a pak vyberte další.

  3. v dialogovém okně konfigurovat nový projekt zadejte do pole Project název text TypeEquivalenceRuntime a pak vyberte vytvořit. Vytvoří se nový projekt.

  4. V Průzkumník řešení klikněte pravým tlačítkem myši na soubor Class1. cs nebo Class1. vb , vyberte Přejmenovat a přejmenujte soubor z Class1 na SampleClass. Chcete-li také přejmenovat třídu na, odpovězte na výzvu Ano SampleClass . 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 pak nastavte výstupní cestu ke stejnému umístění, které jste použili pro projekt TypeEquivalenceInterface, například C:\TypeEquivalenceSample.

  7. V levém podokně obrazovky vlastnosti vyberte podepisování a zaškrtněte políčko podepsat sestavení . V rozevíracím seznamu pro Výběr souboru klíče se silným názvem vyberte možnost Nový.

  8. V dialogovém okně vytvořit klíč se silným názvem zadejte do pole název souboru klíče Key. snk. Zrušte zaškrtnutí políčka chránit soubor klíče heslem a pak vyberte OK.

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

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

  11. V Průzkumník řešení rozbalte složku odkazy a vyberte odkaz TypeEquivalenceInterface . V podokně vlastnosti nastavte konkrétní verzi na hodnotu NEPRAVDA , pokud ještě není.

  12. V editoru kódu otevřete soubor třídy SampleClass 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 stiskněte klávesovou zkratku CTRL + + SHIFT + s a uložte soubory a projekt.

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

Vytvořit klientský projekt

Nakonec vytvořte rovnocenný typ klientského programu, který odkazuje na sestavení rozhraní.

  1. v Visual Studio vyberte soubor > nový > Project.

  2. V dialogovém okně vytvořit nový projekt zadejte do pole Hledat šablony text Konzola . v seznamu vyberte šablonu aplikace konzoly C# nebo Visual Basic (.NET Framework) a pak vyberte další.

  3. v dialogovém okně konfigurovat nový projekt zadejte do pole Project název text TypeEquivalenceClient 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 pak nastavte výstupní cestu ke stejnému umístění, které jste použili pro projekt TypeEquivalenceInterface, například C:\TypeEquivalenceSample.

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

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

  8. V Průzkumník řešení rozbalte složku odkazy a vyberte odkaz TypeEquivalenceInterface . V podokně Vlastnosti nastavte možnosti Vložit typy spolupráce 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 stiskněte klávesovou zkratku CTRL + + SHIFT + s a uložte soubory a projekt.

  11. Stisknutím klávesy CTRL + F5 Sestavte a spusťte program. Všimněte si, že výstup konzoly vrátí sestavení verze 1.0.0.0.

Změna rozhraní

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

  1. v Visual Studio vyberte soubor > otevřít > Project/Solution 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 verzi sestavení a hodnoty verze souboru na 2.0.0.0 a pak vyberte OK.

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

    DateTime GetDate();
    
    Function GetDate() As Date
    
  6. Vyberte soubor > Uložit vše nebo stiskněte klávesovou zkratku CTRL + + SHIFT + s a uložte soubory a projekt.

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

Úprava běhové třídy

Také upravte třídu modulu runtime a aktualizujte její verzi.

  1. v Visual Studio vyberte soubor > otevřít > Project/Solution 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 verzi sestavení a hodnoty verze souboru na 2.0.0.0 a pak vyberte OK.

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

     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 stiskněte klávesovou zkratku CTRL + + SHIFT + s a uložte soubory a projekt.

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

Spustit aktualizovaný klientský program

Přejít do umístění výstupní složky sestavení a spustit TypeEquivalenceClient.exe. Všimněte si, že výstup konzoly nyní odráží novou verzi TypeEquivalenceRuntime sestavení 2.0.0.0, aniž by byl program znovu zkompilován.

Viz také