Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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:
- Hozzon létre egy erős nevű szerelvényt egy nyilvános felülettel, amely beágyazható típusadatokat tartalmaz.
- Hozzon létre egy erős nevű futtatókörnyezeti szerelvényt, amely implementálja a nyilvános felületet.
- 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.
- Módosítsa és építse újra a futtatókörnyezeti szerelvényt.
- 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ésGuidattribútumokkal vannak széljegyzetekkel elosztva, egyedi GRAFIKUS GUID-kkel. - A szerelvényt az attribútum vagy az
ImportedFromTypeLibPrimaryInteropAssemblyattribútum, valamint egy szerelvényszintűGuidattribútum fűzi hozzá. A Visual C# és a Visual Basic projektsablonok alapértelmezés szerint szerelvényszintűGuidattribú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.
A Visual Studióban válassza azÚj>projekt fájlja> lehetőséget.
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.
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.
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.A Megoldáskezelő kattintson a jobb gombbal a TypeEquivalenceInterface projektre, majd válassza a Tulajdonságok lehetőséget.
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.
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.
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.
Nyissa meg az ISampleInterface osztályfájlt a kódszerkesztőben, és cserélje le annak tartalmát a következő kódra a
ISampleInterfacefelü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 InterfaceAz 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.
GuidA 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 ({ }).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("")>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.
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.
A Visual Studióban válassza azÚj>projekt fájlja> lehetőséget.
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.
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.
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 aISampleInterfacefelületet.A Megoldáskezelő kattintson a jobb gombbal a TypeEquivalenceInterface projektre, és válassza a Tulajdonságok lehetőséget.
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.
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.
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.
A Megoldáskezelő kattintson a jobb gombbal a TypeEquivalenceRuntime projektre, és válassza aHivatkozáshozzáadása> lehetőséget.
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.
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.
Nyissa meg a SampleClass osztályfájlt a kódszerkesztőben, és cserélje le annak tartalmát a következő kódra az
SampleClassosztá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 ClassVá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.
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.
A Visual Studióban válassza azÚj>projekt fájlja> lehetőséget.
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.
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.
A Megoldáskezelő kattintson a jobb gombbal a TypeEquivalenceClient projektre, és válassza a Tulajdonságok lehetőséget.
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.
A Megoldáskezelő kattintson a jobb gombbal a TypeEquivalenceClient projektre, és válassza aHivatkozáshozzáadása parancsot>.
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.
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.
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 ModuleVá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.
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.
A Visual Studióban válassza aFájlmegnyitás>>projekt/megoldás lehetőséget, és nyissa meg a TypeEquivalenceInterface projektet.
A Megoldáskezelő kattintson a jobb gombbal a TypeEquivalenceInterface projektre, és válassza a Tulajdonságok lehetőséget.
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.
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.
Nyissa meg a SampleInterface.cs vagy a SampleInterface.vb fájlt, és adja hozzá a következő kódsort a
ISampleInterfacefelülethez:DateTime GetDate();Function GetDate() As DateVá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.
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.
A Visual Studióban válassza aFájlmegnyitás>>projekt/megoldás lehetőséget, és nyissa meg a TypeEquivalenceRuntime projektet.
A Megoldáskezelő kattintson a jobb gombbal a TypeEquivalenceRuntime projektre, és válassza a Tulajdonságok lehetőséget.
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.
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.
Nyissa meg a SampleClass.cs vagy a SampleClass.vb fájlt, és adja hozzá a következő kódot a
SampleClassosztályhoz:public DateTime GetDate() { return DateTime.Now; }Public Function GetDate() As DateTime Implements ISampleInterface.GetDate Return Now End FunctionVá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.
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.