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.
Ebben a témakörben végigvezetjük a C#/WinRT használatával egy C# .NET-kivetítési (vagy interop) szerelvényt egy C++/WinRT Windows-futtatókörnyezeti összetevőből, és nuGet-csomagként terjesztjük .NET-alkalmazásokhoz.
A .NET 6-os és újabb verzióiban a Windows metaadatfájlok (WinMD) használata már nem támogatott (lásd a beépített WinRT támogatás eltávolításáról a .NET-ből). Ehelyett a C#/WinRT eszköz bármely WinMD-fájlhoz létrehozhat egy kivetítési szerelvényt, amely lehetővé teszi a WinRT-összetevők használatát .NET-alkalmazásokból. A vetületi szerelvényt interop szerelvénynek is nevezik. Ez az útmutató a következőket mutatja be:
- A C#/WinRT-csomag használatával hozzon létre C#-vetületet egy C++/WinRT-összetevőből.
- Ossza el az összetevőt és a vetítési szerelvényt NuGet-csomagként.
- Használja a NuGet-csomagot egy .NET-konzolalkalmazásból.
Előfeltételek
Ehhez az útmutatóhoz és a megfelelő mintához a következő eszközökre és összetevőkre van szükség:
- Visual Studio 2022 (vagy Visual Studio 2019) az univerzális Windows platform fejlesztési környezetével telepítve. A Telepítés részletei>a Univerzális Windows Platform fejlesztésnélválassza ki a C++ (v14x) Univerzális Windows Platform-eszközök lehetőséget.
- .NET 6.0 SDK vagy újabb.
Csak Visual Studio 2019. A C++/WinRT VSIX bővítmény c++/WinRT projektsablonokat biztosít a Visual Studióban. A projektsablonok a Visual Studio 2022-be vannak beépítve.
Ebben az útmutatóban a Visual Studio 2022-t és a .NET 6-ot fogjuk használni.
Fontos
Emellett le kell töltenie vagy klónoznia kell a témakörhöz tartozó mintakódot a GitHubon található C#/WinRT-vetítési minta. Látogasson el a CsWinRT webhelyre, és kattintson a zöld Kód gombra az git clone URL-cím lekéréséhez. Mindenképpen olvassa el a mintához tartozó README.md fájlt.
Egyszerű C++/WinRT Windows futtatókörnyezeti összetevő létrehozása
Az útmutató követéséhez először rendelkeznie kell egy C++/WinRT Windows-futtatókörnyezeti összetevővel (WRC), amelyből létre kell hoznia a C#-vetítési szerelvényt.
Ez az útmutató a GitHubon található C#/WinRT projection sample részeként elérhető SimpleMathComponent WRC-t használja, amelyet már letöltött vagy klónozott. A SimpleMathComponent a Windows Runtime Component (C++/WinRT) Visual Studio projektsablonból lett létrehozva (amely a Visual Studio 2022-hez vagy a C++/WinRT VSIX-bővítményhez tartozik).
A SimpleMathComponent projekt Visual Studióban való megnyitásához nyissa meg a \CsWinRT\src\Samples\NetProjectionSample\CppWinRTComponentProjectionSample.sln fájlt, amelyet az adattár letöltésében vagy klónozásában talál.
A projekt kódja az alábbi fejlécfájlban látható alapszintű matematikai műveletek funkcióit biztosítja.
// SimpleMath.h
...
namespace winrt::SimpleMathComponent::implementation
{
struct SimpleMath: SimpleMathT<SimpleMath>
{
SimpleMath() = default;
double add(double firstNumber, double secondNumber);
double subtract(double firstNumber, double secondNumber);
double multiply(double firstNumber, double secondNumber);
double divide(double firstNumber, double secondNumber);
};
}
Ellenőrizheti, hogy a Windows asztallal kompatibilis tulajdonság be van-e állítva Igen értékre a SimpleMathComponent C++/WinRT Windows Runtime összetevő projektnél. Ehhez a projekt tulajdonságaiban, a
C++/WinRT-összetevő készítésének és a WinMD-fájl generálásának további lépéseiért lásd: Windows futtatókörnyezeti összetevők C++/WinRT-vel.
Megjegyzés:
Ha IInspectable::GetRuntimeClassName implementál az összetevőben, akkor érvényes WinRT-osztálynevet kell visszaadnia. Mivel a C#/WinRT az osztálynév sztringjét használja az interophoz, egy helytelen futtatókörnyezeti osztálynév egy InvalidCastExceptionkivételt fog eredményezni.
Vetítési projekt hozzáadása az összetevőmegoldáshoz
Először is, ha a CppWinRTComponentProjectionSample megoldás továbbra is meg van nyitva a Visual Studióban, távolítsa el a SimpleMathProjection projektet a megoldásból. Ezután törölje a fájlrendszerből a SimpleMathProjection mappát (vagy ha szeretné, nevezze át). Ezekre a lépésekre azért van szükség, hogy lépésről lépésre követni tudja ezt az útmutatót.
Adjon hozzá egy új C#-kódtárprojektet a megoldáshoz.
- A Megoldáskezelőben kattintson a jobb gombbal a megoldáscsomópontra, és válassza azÚj projekt>.
- A Új projekt hozzáadása párbeszédpanelen írja be Osztálykönyvtár a keresőmezőbe. Válassza a C#-ot a nyelvi listából, majd válassza a Windowst a platformlistából. Válassza ki az egyszerűen osztálytárnak nevezett C#-projektsablont (előtagok és utótagok nélkül), majd kattintson a Tovább gombra.
- Nevezze el az új simpleMathProjection projektet. A helyet már ugyanarra
\CsWinRT\src\Samples\NetProjectionSamplea mappára kell állítani, amelyben a SimpleMathComponent mappa található, de ezt erősítse meg. Ezután kattintson a Next gombra. - A További információk lapon válassza a .NET 6.0 (Hosszú távú támogatás)elemet, majd válassza a Hozzon létrelehetőséget.
Törölje a csonk Class1.cs fájlt a projektből.
Az alábbi lépésekkel telepítheti a C#/WinRT NuGet-csomagot.
- A Megoldáskezelőben kattintson a jobb gombbal a SimpleMathProjection projektre , és válassza a NuGet-csomagok kezelése lehetőséget.
- A Tallózás lapon írja be vagy illessze be a Microsoft.Windows.CsWinRT fájlt a keresőmezőbe, a keresési eredmények között válassza ki a legújabb verziójú elemet, majd a Telepítés gombra kattintva telepítse a csomagot a SimpleMathProjection projektbe.
Adjon hozzá a SimpleMathProjectionhez egy projekthivatkozást a SimpleMathComponent projekthez. A Megoldáskezelőben kattintson a jobb gombbal a Függőségek csomópontra a SimpleMathProjection projektcsomópont alatt, válassza a Projekthivatkozás hozzáadása lehetőséget, és válassza a SimpleMathComponent projekt >OK gombját.
Még ne próbálja meg felépíteni a projektet. Ezt egy későbbi lépésben fogjuk megtenni.
Eddig a Megoldáskezelőnek ehhez hasonlóan kell kinéznie (a verziószámok eltérőek lesznek).
Készíts projekteket forrásból
A CppWinRTComponentProjectionSample megoldáshoz a C#/WinRT-vetítési minta (amelyet a GitHubról töltött le vagy klónozott, és most megnyitott), a build kimeneti helyét a Directory.Build.props fájllal konfigurálja, hogy a forrásból. Ez azt jelenti, hogy a build kimenetéből származó fájlok a forrásmappán kívül jönnek létre. A C#/WinRT eszköz használatakor javasoljuk, hogy a forrásból építsen ki. Ez megakadályozza, hogy a C#-fordító véletlenül felvegyen minden *.cs fájlt a projekt gyökérkönyvtára alatt, ami ismétlődő típushibákat okozhat (például több konfiguráció és/vagy platform összeállítása esetén).
Annak ellenére, hogy ez már konfigurálva van a CppWinRTComponentProjectionSample megoldáshoz, kövesse az alábbi lépéseket, hogy gyakorolhassa a konfiguráció saját maga számára történő elvégzését.
A megoldás konfigurálása forrásból való buildelésre:
Ha a CppWinRTComponentProjectionSample megoldás továbbra is nyitva van, kattintson a jobb gombbal a megoldáscsomópontra, és válassza azÚj elem> lehetőséget. Válassza ki az XML-fájlelemet , és nevezze el Directory.Build.props néven (bővítmény nélkül
.xml). Kattintson az Igen gombra a meglévő fájl felülírásához.Cserélje le a Directory.Build.props tartalmát az alábbi konfigurációra.
<Project> <PropertyGroup> <BuildOutDir>$([MSBuild]::NormalizeDirectory('$(SolutionDir)', '_build', '$(Platform)', '$(Configuration)'))</BuildOutDir> <OutDir>$([MSBuild]::NormalizeDirectory('$(BuildOutDir)', '$(MSBuildProjectName)', 'bin'))</OutDir> <IntDir>$([MSBuild]::NormalizeDirectory('$(BuildOutDir)', '$(MSBuildProjectName)', 'obj'))</IntDir> </PropertyGroup> </Project>Mentse és zárja be a Directory.Build.props fájlt.
A projektfájl szerkesztése a C#/WinRT végrehajtásához
Mielőtt meghívhatja az eszközt a cswinrt.exe vetítési szerelvény létrehozásához, először szerkesztenie kell a projektfájlt néhány projekttulajdonság megadásához.
A(z) Megoldáskezelő-ben dupla kattintással a SimpleMathProjection csomópontra nyissa meg a projektfájlt a szerkesztőben.
Frissítse az
TargetFrameworkelemet egy adott Windows SDK-verzió megcélzásához. Ez hozzáadja az interop és a projection támogatásához szükséges szerelvényfüggőségeket. Ez a minta a Windows SDKnet6.0-windows10.0.19041.0 (más néven Windows 10, 2004-es verzió). Állítsa be aPlatformelemet a AnyCPU értékre, hogy az eredményül kapott vetítési összeszerelés bármely alkalmazásarchitektúrából elérhető legyen. Ha engedélyezni szeretné, hogy a hivatkozási alkalmazások támogassák a korábbi Windows SDK-verziókat, beállíthatja a tulajdonságotTargetPlatformMinimumVersionis.<PropertyGroup> <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework> <!-- Set Platform to AnyCPU to allow consumption of the projection assembly from any architecture. --> <Platform>AnyCPU</Platform> </PropertyGroup>Megjegyzés:
Ehhez az útmutatóhoz és a kapcsolódó mintakódhoz a megoldás x64 és Kiadványkészült. Vegye figyelembe, hogy a SimpleMathProjection projekt úgy van beállítva, hogy minden architektúra-konfiguráció esetén az AnyCPU platformra épüljön.
Adjon hozzá egy második
PropertyGroupelemet (közvetlenül az első után), amely több C#/WinRT-tulajdonságot állít be.<PropertyGroup> <CsWinRTIncludes>SimpleMathComponent</CsWinRTIncludes> <CsWinRTGeneratedFilesDir>$(OutDir)</CsWinRTGeneratedFilesDir> </PropertyGroup>A példában szereplő beállításokkal kapcsolatban az alábbiakban talál néhány részletet:
- A
CsWinRTIncludestulajdonság határozza meg, hogy mely névtereket kell kivetíteni. - A
CsWinRTGeneratedFilesDirtulajdonság beállítja azt a kimeneti könyvtárat, amelyben a vetítési forrásfájlok létre lettek hozva. Ez a tulajdonság a fenti szakaszban meghatározottOutDirértékre van állítva, a Directory.Build.props alapján.
- A
Mentse és zárja be a SimpleMathProjection.csproj fájlt, és szükség esetén kattintson a projektek újratöltéséhez .
NuGet-csomag létrehozása a kivetítéssel
A .NET-alkalmazásfejlesztők számára készült kivetítési szerelvény elosztásához automatikusan létrehozhat egy NuGet-csomagot a megoldás létrehozásakor további projekttulajdonságok hozzáadásával. A .NET-célok esetében a NuGet-csomagnak tartalmaznia kell a kivetítési szerelvényt és az összetevő implementációs szerelvényét.
Az alábbi lépésekkel nuGet-specifikációs (
.nuspec) fájlt adhat hozzá a SimpleMathProjection projekthez.- A Megoldáskezelőben kattintson a jobb gombbal a SimpleMathProjection csomópontra, válassza azÚj mappa> lehetőséget, és adja meg a mappa nuget nevét.
- Kattintson a jobb gombbal a nuget mappára, válassza azÚj elem> lehetőséget, válassza az XML-fájlt, és adja neki a SimpleMathProjection.nuspec nevet.
A(z) Megoldáskezelő-ben dupla kattintással a SimpleMathProjection csomópontra nyissa meg a projektfájlt a szerkesztőben. Adja hozzá a következő tulajdonságcsoportot a most megnyitott SimpleMathProjection.csproj fájlhoz (közvetlenül a két meglévő
PropertyGroupelem után) a csomag automatikus létrehozásához. Ezek a tulajdonságok határozzák meg a NuGet-csomag létrehozásához aNuspecFileelemet és a könyvtárat.<PropertyGroup> <GeneratedNugetDir>.\nuget\</GeneratedNugetDir> <NuspecFile>$(GeneratedNugetDir)SimpleMathProjection.nuspec</NuspecFile> <OutputPath>$(GeneratedNugetDir)</OutputPath> <GeneratePackageOnBuild>true</GeneratePackageOnBuild> </PropertyGroup>Megjegyzés:
Ha külön szeretne létrehozni egy csomagot, akkor a parancssorból is futtathatja az
nuget.exeeszközt. További információ egy NuGet-csomag létrehozásáról: Csomag létrehozása a nuget.exe parancssorihasználatával.Nyissa meg a SimpleMathProjection.nuspec fájlt a csomaglétrehozási tulajdonságok szerkesztéséhez, és illessze be a következő kódot. Az alábbi kódrészlet egy példa NuGet-specifikáció a SimpleMathComponent több cél keretrendszerre való terjesztéséhez. Vegye figyelembe, hogy a SimpleMathComponent.winmd helyett a SimpleMathProjection.dllvetítési szerelvény van megadva a cél
lib\net6.0-windows10.0.19041.0\SimpleMathProjection.dll. Ez a viselkedés a .NET 6-os és újabb verzióiban új, és a C#/WinRT engedélyezi. Az implementálási szerelvényt (SimpleMathComponent.dll) is el kell osztani, és futásidőben kell betölteni.<?xml version="1.0" encoding="utf-8"?> <package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"> <metadata> <id>SimpleMathComponent</id> <version>0.1.0-prerelease</version> <authors>Contoso Math Inc.</authors> <description>A simple component with basic math operations</description> <dependencies> <group targetFramework="net6.0-windows10.0.19041.0" /> <group targetFramework=".NETCoreApp3.0" /> <group targetFramework="UAP10.0" /> <group targetFramework=".NETFramework4.6" /> </dependencies> </metadata> <files> <!--Support .NET 6, .NET Core 3, UAP, .NET Framework 4.6, C++ --> <!--Architecture-neutral assemblies--> <file src="..\..\_build\AnyCPU\Release\SimpleMathProjection\bin\SimpleMathProjection.dll" target="lib\net6.0-windows10.0.19041.0\SimpleMathProjection.dll" /> <file src="..\..\_build\x64\Release\SimpleMathComponent\bin\SimpleMathComponent\SimpleMathComponent.winmd" target="lib\netcoreapp3.0\SimpleMathComponent.winmd" /> <file src="..\..\_build\x64\Release\SimpleMathComponent\bin\SimpleMathComponent\SimpleMathComponent.winmd" target="lib\uap10.0\SimpleMathComponent.winmd" /> <file src="..\..\_build\x64\Release\SimpleMathComponent\bin\SimpleMathComponent\SimpleMathComponent.winmd" target="lib\net46\SimpleMathComponent.winmd" /> <!--Architecture-specific implementation DLLs should be copied into RID-relative folders--> <file src="..\..\_build\x64\Release\SimpleMathComponent\bin\SimpleMathComponent\SimpleMathComponent.dll" target="runtimes\win10-x64\native\SimpleMathComponent.dll" /> <!--To support x86 and Arm64, build SimpleMathComponent for those other architectures and uncomment the entries below.--> <!--<file src="..\..\_build\Win32\Release\SimpleMathComponent\bin\SimpleMathComponent\SimpleMathComponent.dll" target="runtimes\win10-x86\native\SimpleMathComponent.dll" />--> <!--<file src="..\..\_build\arm64\Release\SimpleMathComponent\bin\SimpleMathComponent\SimpleMathComponent.dll" target="runtimes\win10-arm64\native\SimpleMathComponent.dll" />--> </files> </package>Megjegyzés:
SimpleMathComponent.dllaz összetevő implementálási szerelvénye architektúraspecifikus. Ha más platformokat (például x86-ot vagy Arm64-et) támogat, először a SimpleMathComponentet fel kell építenie a kívánt platformokhoz, és hozzá kell adnia ezeket az assembly fájlokat a megfelelő RID-specifikus mappához. A kivetítési szerelvény SimpleMathProjection.dll és a SimpleMathComponent.winmd összetevő egyaránt architektúrasemleges.
Mentse és zárja be az imént szerkesztett fájlokat.
A megoldás létrehozása a kivetítés és a NuGet-csomag létrehozásához
A megoldás létrehozása előtt ellenőrizze a Configuration Manager beállításait a Visual Studióban, a Build>Configuration Manager alatt. Ebben a lépésről-lépésre útmutatóban állítsa be a Konfiguráció-t a Kiadás-ra és a Platform-t a x64-re a megoldáshoz.
Ezen a ponton már létrehozhatja a megoldást. Kattintson a jobb gombbal a megoldás csomópontra, és válassza a Build megoldáslehetőséget. Ez először a SimpleMathComponent projektet, majd a SimpleMathProjection projektet hozza létre. A WinMD összetevő és az implementáció szerelvénye (SimpleMathComponent.winmd és SimpleMathComponent.dll), a kivetítési forrásfájlok és a kivetítési szerelvény (SimpleMathProjection.dll) mind a _build kimeneti könyvtárban lesznek létrehozva. A létrehozott NuGet-csomagot is láthatja, a SimpleMathComponent0.1.0-prerelease.nupkg fájlt a \SimpleMathProjection\nuget mappa alatt.
Fontos
Ha a fent említett fájlok egyike sem jön létre, akkor hozza létre a megoldást még egyszer. Előfordulhat, hogy be kell zárnia és újra meg kell nyitnia a megoldást, mielőtt újraépíti.
Előfordulhat, hogy be kell zárnia és újra meg kell nyitnia a megoldást ahhoz, hogy a .nupkg Visual Studióban az ábrán látható módon jelenjen meg (vagy csak válassza ki, majd törölje a kijelölést az Összes fájl megjelenítése lehetőségből).
Hivatkozás a NuGet-csomagra egy C# .NET 6-os konzolalkalmazásban
A SimpleMathComponent .NET-projektből való felhasználásához egyszerűen hozzáadhat egy új .NET-projekthez egy hivatkozást a SimpleMathComponent0.1.0-prerelease.nupkg NuGet-csomagra , amelyet az előző szakaszban hoztunk létre. Az alábbi lépések bemutatják, hogyan teheti ezt meg egy egyszerű konzolalkalmazás külön megoldásban való létrehozásával.
Az alábbi lépésekkel létrehozhat egy C# -konzolalkalmazás-projektet tartalmazó új megoldást (a projekt új megoldásban való létrehozása lehetővé teszi a SimpleMathComponent NuGet-csomag önálló visszaállítását).
Fontos
Ebben a mappában fogjuk létrehozni ezt az új
\CsWinRT\src\Samples\NetProjectionSample, amelyet a C#/WinRT-vetítési minta letöltött vagy klónozott verziójában talál.- A Visual Studio új példányában válassza Fájl>Új>Projektlehetőséget.
- Az Új projekt létrehozása párbeszédpanelen keresse meg a Konzolalkalmazás projektsablont. Válassza ki a egyszerűen konzolalkalmazásnak nevezett C#-projektsablont (előtagok és utótagok nélkül), majd kattintson a Tovább gombra. Ha Visual Studio 2019-et használ, akkor a projektsablon a Konzolalkalmazás.
- Nevezze el az új projektet SampleConsoleApp néven, állítsa a helyét arra
\CsWinRT\src\Samples\NetProjectionSamplea mappára, amelyben a SimpleMathComponent és a SimpleMathProjection mappa található, majd kattintson a Tovább gombra. - A További információk lapon válassza a .NET 6.0 (Hosszú távú támogatás)elemet, majd válassza a Hozzon létrelehetőséget.
A Megoldáskezelőben kattintson duplán a SampleConsoleApp csomópontra a SampleConsoleApp.csproj projektfájl megnyitásához, és szerkessze a
TargetFrameworkPlatformtulajdonságokat úgy, hogy azok az alábbi felsorolásban látható módon jelenjenek meg. Adja hozzá azPlatformelemet, ha nincs ott.<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework> <Platform>x64</Platform> </PropertyGroup>Ha a SampleConsoleApp.csproj projektfájl továbbra is nyitva van, a SampleConsoleApp projekthez hozzáadunk egy hivatkozást a SimpleMathComponent NuGet-csomaghoz. A SimpleMathComponent NuGet visszaállításához a projekt építésekor használhatja a
RestoreSourcestulajdonságot a komponens megoldás nuget mappájának elérési útjával. Másolja ki a következő konfigurációt, és illessze be a SampleConsoleApp.csproj fájlba (azProjectelemen belül).<PropertyGroup> <RestoreSources> https://api.nuget.org/v3/index.json; ../SimpleMathProjection/nuget </RestoreSources> </PropertyGroup> <ItemGroup> <PackageReference Include="SimpleMathComponent" Version="0.1.0-prerelease" /> </ItemGroup>Fontos
A fent látható
RestoreSourcescsomag elérési útja../SimpleMathProjection/nuget. Ez az elérési út helyes, feltéve, hogy követte az útmutató lépéseit, így a SimpleMathComponent és a SampleConsoleApp-projektek is ugyanabban a mappában vannak (ebben az esetben aNetProjectionSamplemappában). Ha valami mást tett, ennek megfelelően módosítania kell ezt az útvonalat. Másik lehetőségként hozzáadhat egy helyi NuGet csomagforrást a megoldáshoz.Szerkessze a Program.cs fájlt a SimpleMathComponent által biztosított funkciók használatához.
var x = new SimpleMathComponent.SimpleMath(); Console.WriteLine("Adding 5.5 + 6.5 ..."); Console.WriteLine(x.add(5.5, 6.5).ToString());Mentse és zárja be az imént szerkesztett fájlokat, majd hozza létre és futtassa a konzolalkalmazást. Az alábbi kimenetnek kell megjelennie.
Ismert problémák
- A vetítési projekt létrehozásakor a következő hibaüzenet jelenhet meg: hiba MSB3271 Az "MSIL" projekt processzorarchitektúrája és az "x86" implementációs fájl processzorarchitektúrája nem egyezik.\SimpleMathComponent.dll" for ".. \SimpleMathComponent.winmd". Ez az eltérés futásidejű hibákat okozhat. Fontolja meg a projekt célzott processzorarchitektúrájának módosítását a Configuration Manageren keresztül, hogy a processzorarchitektúrákat a projekt és a megvalósítási fájl között igazítsa, vagy válasszon ki egy winmd fájlt egy olyan implementációs fájllal, amely a projekt célzott processzorarchitektúrájának megfelelő processzorarchitektúrával rendelkezik. A hiba megkerüléséhez adja hozzá a következő tulajdonságot a C#-kódtár projektfájljához:
<PropertyGroup> <!-- Workaround for MSB3271 error on processor architecture mismatch --> <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch> </PropertyGroup>
További szempontok
A jelen témakörben bemutatott C#-vetítési (vagy interop) szerelvény meglehetősen egyszerű– nem függ más összetevőkhöz. Ha azonban olyan C#-vetítést szeretne létrehozni egy C++/WinRT-összetevőhöz, amely Windows App SDK-típusokra hivatkozik, a kivetítési projektben fel kell vennie egy hivatkozást a Windows App SDK NuGet-csomagra. Ha az ilyen hivatkozások hiányoznak, akkor olyan hibák jelennek meg, mint a "T< típus >nem található".
Egy másik dolog, amit ebben a témakörben teszünk, az a kivetítés NuGet-csomagként való terjesztése. Jelenleg szükséges.
Erőforrások
Windows developer