我開發了基於C/C++的Windows運行時組件對於通用Windows,我現在試圖將它包含在NuGet plackage中。.winmd文件平臺是獨立的嗎?
對於NuGet版本3,運行時間文件夾已被引入,詳見here。不幸的是,本文檔沒有提供關於如何處理Windows運行時組件的更多信息。
我安排在NuGet包中的文件是這樣的:
└───MyNuGetPackage
├───lib
│ └───uap
│ MyRuntimeLibrary.winmd
│
├───build
│ └───uap
│ MyNuGetPackage.targets
│
└───runtimes
├───win10-x86
│ └───native
│ MyRuntimeLibrary.dll
│
├───win10-x64
│ └───native
│ MyRuntimeLibrary.dll
│
└───win10-arm
└───native
MyRuntimeLibrary.dll
的MyNuGetPackage.targets文件的生成過程中使用的引用添加到.winmd文件,並明確指定實施.dll文件:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="InjectReference" BeforeTargets="ResolveAssemblyReferences">
<ItemGroup Condition=" '$(Platform)' == 'x86' or '$(Platform)' == 'x64' or '$(Platform)' == 'ARM'">
<Reference Include="Dicom.Imaging.Codec">
<HintPath>$(MSBuildThisFileDirectory)..\..\lib\uap\MyRuntimeLibrary.winmd</HintPath>
<Implementation>MyRuntimeLibrary.dll</Implementation>
</Reference>
</ItemGroup>
</Target>
</Project>
據我已經能夠告訴,這個NuGet包compositio n有效;建立了不同平臺,和ARM當相關實現文件被選中。
然而,上述辦法,我只包括一個目標平臺(在這種特定情況下).winmd文件。 這真的好嗎?這似乎工作,但真的是.winmd文件平臺獨立?
萬一.winmd文件是平臺依賴,我嘗試添加特定.winmd文件平臺的目標下運行時文件夾,如:
└───runtimes
├───win10-x86
│ └───lib
│ └───uap
│ MyRuntimeLibrary.winmd
│ └───native
│ MyRuntimeLibrary.dll
和我相應地更新了MyNuGetPackage.targets文件。然而,當我安裝這種替代NuGet包,並嘗試建立針對特定平臺,我得到一個有效載荷生成錯誤的MyRuntimeLibrary.winmd文件正被複制到輸出目錄從兩個不同的位置,無論是的lib \ UAP文件夾和運行時間子文件夾。
這也無助於排除頂部的lib \ uap文件夾;如果我這樣做,構建過程根本找不到任何.winmd文件引用。
如果.winmd文件是依賴於平臺畢竟,我應該怎麼安排我的NuGet包的.winmd和.DLL文件,以確保足夠的包安裝在所有平臺上?
'winmd'文件不包含代碼。例如,您可以通過在VS 2015中構建新的運行時組件來嘗試此操作。生成的二進制文件將是一個包含元數據和類實現的單個文件。 – WiredPrairie
只需在... C++運行時組件的.winmd文件只包含元數據。但是,C#運行時組件包含元數據和實現。 – gotomanners