Dot-Net

如何打包面向通用 Windows 平台的 .NET 庫?

  • August 22, 2016

如何以現代通用方式打包通用 Windows 平台庫以通過 NuGet 發布?假設我有一個用 C# 編寫的 AnyCPU 程序集,它導出一些程式碼和 XAML 使用者控制項。

這是一系列問題和答案,記錄了我對現代 NuGet 包創作主題的發現,特別關注 NuGet 3 引入的更改。您可能還對一些相關問題感興趣:

此答案基於用於打包面向 .NET Framework 的庫的原則。首先閱讀連結的答案以更好地理解以下內容。

首先,您必須選中項目建構設置中的“生成庫佈局”複選框。沒有這個,將無法使用您的庫導出的 XAML 使用者控制項。確保將此設置應用於所有建構配置和架構。

除了基本的 3 個資產(參見上面連結的答案)之外,您還需要從建構輸出目錄中打包以下附加資產:

  • MyUwpLibrary.pri
  • MyUwpLibrary 子目錄

這些額外資源是使用程序集導出的 XAML 使用者控制項所必需的。始終包含這些資產,即使您尚未從庫中導出任何 XAML - 您可能有一天會這樣做,這在以後很難記住!

要發布 UWP 庫,您需要創建具有以下結構的 NuGet 包:

\---lib
   \---uap10.0
       |   MyUwpLibrary.dll
       |   MyUwpLibrary.pdb
       |   MyUwpLibrary.pri
       |   MyUwpLibrary.xml
       |
       \---MyUwpLibrary
               HelloWorld.xaml
               MyUwpLibrary.xr.xml

如果您熟悉 .NET Framework 庫發布,那麼這應該看起來非常熟悉和簡單。您可以對 nuspec 文件使用以下模板:

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
   <metadata minClientVersion="3.2">
       <id>Example.MyUwpLibrary</id>
       <version>1.0.0</version>
       <authors>Firstname Lastname</authors>
       <description>Example of a UWP library that exports a user control.</description>
       <dependencies>
           <dependency id="Newtonsoft.Json" version="8.0.1" />
       </dependencies>
   </metadata>
   <files>
       <!-- The double wildcard will also grab all the resource files and the resource subdirectory. -->
       <file src="..\bin\Release\MyUwpLibrary**" target="lib\uap10.0" />
   </files>
</package>

就是這樣,真的!請記住在創建 NuGet 包之前使用發布配置建構您的解決方案。有關更多詳細資訊,請參閱上面連結的有關打包 .NET Framework 庫的答案。

GitHub 上提供了範例庫和相關的打封包件。此答案對應的解決方案是 SimpleUwpLibrary。

引用自:https://stackoverflow.com/questions/34611882