Dot-Net
如何打包面向通用 Windows 平台的 .NET 庫?
如何以現代通用方式打包通用 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。