Útmutató: Felügyelt szerelvények beágyazási típusai a Visual Studióban

Ha egy erős nevű felügyelt szerelvényből ágyaz be típusadatokat, lazán párosíthat típusokat egy alkalmazásban a verziófüggetlenség eléréséhez. Ez azt is jelentheti, hogy a program úgy írható, hogy a felügyelt tár bármely verziójából használjon típusokat anélkül, hogy minden új verzióhoz újra kellene írni.

A típusbeágyazást gyakran használják com-interop-okkal, például olyan alkalmazásokkal, amelyek a Microsoft Office automatizálási objektumait használják. A beágyazási típusadatok lehetővé teszik, hogy a program ugyanazon buildje különböző számítógépeken működjön együtt a Microsoft Office különböző verzióival. A típusbeágyazást azonban teljes körűen felügyelt megoldásokkal is használhatja.

Miután meghatározta a beágyazható nyilvános adaptereket, futtatókörnyezeti osztályokat hoz létre, amelyek implementálják ezeket az interfészeket. Az ügyfélprogramok a tervezéskor beágyazhatják az illesztők típusadatait a nyilvános interfészeket tartalmazó szerelvényre való hivatkozással, és a Embed Interop Types hivatkozás tulajdonságát a következőre Trueadhatja meg: . Az ügyfélprogram ezután betöltheti az illesztőként beírt futtatókörnyezeti objektumok példányait. Ez egyenértékű a parancssor-fordító használatával és a szerelvényre való hivatkozással az EmbedInteropTypes fordítóval.

Ha létrehoz egy új verziót az erősnevű futtatókörnyezeti szerelvényhez, az ügyfélprogramot nem kell újrafordítással létrehozni. Az ügyfélprogram továbbra is a futtatókörnyezeti szerelvény bármelyik verzióját használja, a nyilvános felületek beágyazott típusadatait használva.

Ebben az útmutatóban a következőkre van szüksége:

  1. Hozzon létre egy erős nevű szerelvényt egy nyilvános felülettel, amely beágyazható típusadatokat tartalmaz.
  2. Hozzon létre egy erős nevű futtatókörnyezeti szerelvényt, amely implementálja a nyilvános felületet.
  3. Hozzon létre egy ügyfélprogramot, amely beágyazza a típusadatokat a nyilvános felületről, és létrehozza az osztály egy példányát a futtatókörnyezeti szerelvényből.
  4. Módosítsa és építse újra a futtatókörnyezeti szerelvényt.
  5. Futtassa az ügyfélprogramot annak megtekintéséhez, hogy a futtatókörnyezeti szerelvény új verzióját használja újrafordítás nélkül.

Megjegyzés

Előfordulhat, hogy a számítógép különböző neveket vagy helyeket jelenít meg a Visual Studio felhasználói felületének egyes elemeihez az alábbi utasításokban. Ezeket az elemeket az Ön által használt Visual Studio-kiadás és a használt beállítások határozzák meg. További információ: Az IDE személyre szabása.

Feltételek és korlátozások

A szerelvényből a következő feltételekkel ágyazhat be típusadatokat:

  • A szerelvény legalább egy nyilvános felületet tesz elérhetővé.
  • A beágyazott interfészek attribútumokkal ComImport és Guid attribútumokkal vannak széljegyzetekkel elosztva, egyedi GRAFIKUS GUID-kkel.
  • A szerelvényt az attribútum vagy az ImportedFromTypeLibPrimaryInteropAssembly attribútum, valamint egy szerelvényszintű Guid attribútum fűzi hozzá. A Visual C# és a Visual Basic projektsablonok alapértelmezés szerint szerelvényszintű Guid attribútumot tartalmaznak.

Mivel a típusbeágyazás elsődleges funkciója a COM interop szerelvények támogatása, a következő korlátozások vonatkoznak a típusinformációk teljes körűen felügyelt megoldásba történő beágyazásakor:

  • Csak a COM-interopra jellemző attribútumok vannak beágyazva. A rendszer figyelmen kívül hagyja az egyéb attribútumokat.
  • Ha egy típus általános paramétereket használ, és az általános paraméter típusa beágyazott típus, akkor ez a típus nem használható szerelvényhatáron keresztül. A szerelvényhatárok átlépésének példái közé tartozik egy metódus meghívása egy másik szerelvényből, vagy egy másik szerelvényben definiált típusból származtatott típus.
  • Az állandók nincsenek beágyazva.
  • Az System.Collections.Generic.Dictionary<TKey,TValue> osztály nem támogatja a beágyazott típust kulcsként. A beágyazott típus kulcsként való támogatásához saját szótártípust is implementálhat.

Felület létrehozása

Az első lépés a típusegyenérték-illesztő szerelvény létrehozása.

  1. A Visual Studióban válassza azÚj>projekt fájlja> lehetőséget.

  2. Az Új projekt létrehozása párbeszédpanelen írja be az osztálytár kifejezést a Sablonok keresése mezőbe. Válassza ki a C# vagy a Visual Basic Class Library (.NET-keretrendszer) sablont a listából, majd válassza a Tovább gombot.

  3. Az Új projekt konfigurálása párbeszédpanel Projekt neve területén írja be a TypeEquivalenceInterface kifejezést, majd válassza a Létrehozás lehetőséget. Létrejön az új projekt.

  4. A Megoldáskezelő kattintson a jobb gombbal a Class1.cs vagy a Class1.vb fájlra, válassza az Átnevezés lehetőséget, és nevezze át a fájlt class1-rőlISampleInterface névre. Igen válasz a kérdésre, és nevezze át az osztályt a következőre: ISampleInterface. Ez az osztály az osztály nyilvános felületét jelöli.

  5. A Megoldáskezelő kattintson a jobb gombbal a TypeEquivalenceInterface projektre, majd válassza a Tulajdonságok lehetőséget.

  6. Válassza a Létrehozás lehetőséget a Tulajdonságok képernyő bal oldali paneljén, és állítsa a Kimeneti elérési utat a számítógépen található helyre, például C:\TypeEquivalenceSample. Az útmutató során ugyanazt a helyet használja.

  7. A Tulajdonságok képernyő bal oldali ablaktábláján válassza azErős elnevezéslétrehozása> lehetőséget, majd jelölje be a Szerelvény aláírása jelölőnégyzetet. Az Erős név kulcs fájlban válassza a Tallózás lehetőséget.

  8. Keresse meg és válassza ki a TypeEquivalenceInterface projektben létrehozott key.snk fájlt, majd kattintson az OK gombra. További információ: Nyilvános-privát kulcspár létrehozása.

  9. Nyissa meg az ISampleInterface osztályfájlt a kódszerkesztőben, és cserélje le annak tartalmát a következő kódra a ISampleInterface felület létrehozásához:

    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. Az Eszközök menüben válassza a Guid létrehozása lehetőséget, majd a GUID létrehozása párbeszédpanelen válassza a Beállításformátum lehetőséget. Válassza a Másolás, majd a Kilépés lehetőséget.

  11. Guid A kód attribútumában cserélje le a minta GUID azonosítóját a másolt GUID-ra, és távolítsa el a kapcsos zárójeleket ({ }).

  12. A Megoldáskezelőbontsa ki a Tulajdonságok mappát, és válassza ki a AssemblyInfo.cs vagy a AssemblyInfo.vb fájlt. A kódszerkesztőben adja hozzá a következő attribútumot a fájlhoz:

    [assembly: ImportedFromTypeLib("")]
    
    <Assembly: ImportedFromTypeLib("")>
    
  13. Válassza azÖsszes mentéselehetőséget>, vagy nyomja le a CtrlShift+Sbillentyűkombinációt+ a fájlok és a projekt mentéséhez.

  14. A Megoldáskezelő kattintson a jobb gombbal a TypeEquivalenceInterface projektre, és válassza a Build lehetőséget. Az osztálytár DLL-fájlját a rendszer lefordítja és menti a megadott build kimeneti útvonalára, például C:\TypeEquivalenceSample.

Futtatókörnyezeti osztály létrehozása

Ezután hozza létre a típus egyenértékűségi futtatókörnyezet osztályát.

  1. A Visual Studióban válassza azÚj>projekt fájlja> lehetőséget.

  2. Az Új projekt létrehozása párbeszédpanelen írja be az osztálytár kifejezést a Sablonok keresése mezőbe. Válassza ki a C# vagy a Visual Basic Class Library (.NET-keretrendszer) sablont a listából, majd válassza a Tovább gombot.

  3. Az Új projekt konfigurálása párbeszédpanel Projekt neve területén írja be a TypeEquivalenceRuntime kifejezést, majd válassza a Létrehozás lehetőséget. Létrejön az új projekt.

  4. A Megoldáskezelő kattintson a jobb gombbal a Class1.cs vagy a Class1.vb fájlra, válassza az Átnevezés lehetőséget, és nevezze át a fájlt Class1-rőlSampleClass-ra. Igen válasz a kérdésre, és nevezze át az osztályt a következőre: SampleClass. Ez az osztály implementálja a ISampleInterface felületet.

  5. A Megoldáskezelő kattintson a jobb gombbal a TypeEquivalenceInterface projektre, és válassza a Tulajdonságok lehetőséget.

  6. Válassza a Létrehozás lehetőséget a Tulajdonságok képernyő bal oldali ablaktábláján, majd állítsa a Kimeneti elérési utat a TypeEquivalenceInterface projekthez használt helyre, például C:\TypeEquivalenceSample.

  7. A Tulajdonságok képernyő bal oldali ablaktábláján válassza azErős elnevezéslétrehozása> lehetőséget, majd jelölje be a Szerelvény aláírása jelölőnégyzetet. Az Erős név kulcs fájlban válassza a Tallózás lehetőséget.

  8. Keresse meg és válassza ki a TypeEquivalenceInterface projektben létrehozott key.snk fájlt, majd kattintson az OK gombra. További információ: Nyilvános-privát kulcspár létrehozása.

  9. A Megoldáskezelő kattintson a jobb gombbal a TypeEquivalenceRuntime projektre, és válassza aHivatkozáshozzáadása> lehetőséget.

  10. A Referenciakezelő párbeszédpanelen válassza a Tallózás lehetőséget, és keresse meg a kimeneti elérési út mappát. Jelölje ki a TypeEquivalenceInterface.dll fájlt, válassza a Hozzáadás, majd az OK gombot.

  11. A Megoldáskezelő bontsa ki a Hivatkozások mappát, és válassza a TypeEquivalenceInterface hivatkozást. A Tulajdonságok panelen állítsa az Adott verziótHamis értékre, ha még nem tette meg.

  12. Nyissa meg a SampleClass osztályfájlt a kódszerkesztőben, és cserélje le annak tartalmát a következő kódra az SampleClass osztály létrehozásához:

    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. Válassza azÖsszes mentéselehetőséget>, vagy nyomja le a CtrlShift+Sbillentyűkombinációt+ a fájlok és a projekt mentéséhez.

  14. A Megoldáskezelő kattintson a jobb gombbal a TypeEquivalenceRuntime projektre, és válassza a Build lehetőséget. A rendszer lefordítja és menti az osztálytár DLL-fájlját a megadott build kimeneti útvonalára.

Ügyfélprojekt létrehozása

Végül hozzon létre egy típusegyenlítési ügyfélprogramot, amely az interfészszerelvényre hivatkozik.

  1. A Visual Studióban válassza azÚj>projekt fájlja> lehetőséget.

  2. Az Új projekt létrehozása párbeszédpanelen írja be a konzol kifejezést a Sablonok keresése mezőbe. Válassza ki a C# vagy a Visual Basic Console App (.NET-keretrendszer) sablont a listából, majd válassza a Tovább gombot.

  3. Az Új projekt konfigurálása párbeszédpanel Projekt neve területén írja be a TypeEquivalenceClient kifejezést, majd válassza a Létrehozás lehetőséget. Létrejön az új projekt.

  4. A Megoldáskezelő kattintson a jobb gombbal a TypeEquivalenceClient projektre, és válassza a Tulajdonságok lehetőséget.

  5. Válassza a Létrehozás lehetőséget a Tulajdonságok képernyő bal oldali ablaktábláján, majd állítsa a Kimeneti elérési utat a TypeEquivalenceInterface projekthez használt helyre, például C:\TypeEquivalenceSample.

  6. A Megoldáskezelő kattintson a jobb gombbal a TypeEquivalenceClient projektre, és válassza aHivatkozáshozzáadása parancsot>.

  7. A Referenciakezelő párbeszédpanelen, ha a TypeEquivalenceInterface.dll fájl már szerepel a listában, jelölje ki. Ha nem, válassza a Tallózás lehetőséget, keresse meg a kimeneti elérési út mappáját, válassza ki a TypeEquivalenceInterface.dll fájlt (nem a TypeEquivalenceRuntime.dll), majd válassza a Hozzáadás lehetőséget. Válassza az OK lehetőséget.

  8. A Megoldáskezelő bontsa ki a Hivatkozások mappát, és válassza a TypeEquivalenceInterface hivatkozást. A Tulajdonságok panelen állítsa az Interop-típusok beágyazása beállítást True (Igaz) értékre.

  9. Nyissa meg a Program.cs vagy a Module1.vb fájlt a kódszerkesztőben, és cserélje le annak tartalmát a következő kódra az ügyfélprogram létrehozásához:

    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. Válassza azÖsszes mentéselehetőséget>, vagy nyomja le a CtrlShift+Sbillentyűkombinációt+ a fájlok és a projekt mentéséhez.

  11. A program létrehozásához és futtatásához nyomja le a Ctrl+F5 billentyűkombinációt. Vegye figyelembe, hogy a konzol kimenete az 1.0.0.0-s szerelvényverziót adja vissza.

A felület módosítása

Most módosítsa az illesztőszerelvényt, és módosítsa annak verzióját.

  1. A Visual Studióban válassza aFájlmegnyitás>>projekt/megoldás lehetőséget, és nyissa meg a TypeEquivalenceInterface projektet.

  2. A Megoldáskezelő kattintson a jobb gombbal a TypeEquivalenceInterface projektre, és válassza a Tulajdonságok lehetőséget.

  3. Válassza az Alkalmazás lehetőséget a Tulajdonságok képernyő bal oldali paneljén, majd válassza a Szerelvény adatai lehetőséget.

  4. A Szerelvény adatai párbeszédpanelen módosítsa a Szerelvény verziója és a Fájlverzió értékét 2.0.0.0-ra, majd kattintson az OK gombra.

  5. Nyissa meg a SampleInterface.cs vagy a SampleInterface.vb fájlt, és adja hozzá a következő kódsort a ISampleInterface felülethez:

    DateTime GetDate();
    
    Function GetDate() As Date
    
  6. Válassza azÖsszes mentéselehetőséget>, vagy nyomja le a CtrlShift+Sbillentyűkombinációt+ a fájlok és a projekt mentéséhez.

  7. A Megoldáskezelő kattintson a jobb gombbal a TypeEquivalenceInterface projektre, és válassza a Build lehetőséget. Az osztálytár DLL-fájljának egy új verziója lesz lefordítva és mentve a build kimeneti útvonalára.

A futtatókörnyezeti osztály módosítása

Módosítsa a futtatókörnyezeti osztályt is, és frissítse annak verzióját.

  1. A Visual Studióban válassza aFájlmegnyitás>>projekt/megoldás lehetőséget, és nyissa meg a TypeEquivalenceRuntime projektet.

  2. A Megoldáskezelő kattintson a jobb gombbal a TypeEquivalenceRuntime projektre, és válassza a Tulajdonságok lehetőséget.

  3. Válassza az Alkalmazás lehetőséget a Tulajdonságok képernyő bal oldali paneljén, majd válassza a Szerelvény adatai lehetőséget.

  4. A Szerelvény adatai párbeszédpanelen módosítsa a Szerelvény verziója és a Fájlverzió értékét 2.0.0.0-ra, majd kattintson az OK gombra.

  5. Nyissa meg a SampleClass.cs vagy a SampleClass.vb fájlt, és adja hozzá a következő kódot a SampleClass osztályhoz:

     public DateTime GetDate()
     {
         return DateTime.Now;
     }
    
    Public Function GetDate() As DateTime Implements ISampleInterface.GetDate
        Return Now
    End Function
    
  6. Válassza azÖsszes mentéselehetőséget>, vagy nyomja le a CtrlShift+Sbillentyűkombinációt+ a fájlok és a projekt mentéséhez.

  7. A Megoldáskezelő kattintson a jobb gombbal a TypeEquivalenceRuntime projektre, és válassza a Build lehetőséget. Az osztálytár DLL-fájljának egy új verziója lesz lefordítva és mentve a build kimeneti útvonalára.

A frissített ügyfélprogram futtatása

Nyissa meg a build kimeneti mappájának helyét, és futtassa TypeEquivalenceClient.exe. Vegye figyelembe, hogy a konzol kimenete most már a szerelvény új, 2.0.0.0-s verzióját TypeEquivalenceRuntime tükrözi a program újrafordítása nélkül.

Lásd még