如何以通用NuGet发布的现代通用方式打包通用Windows平台库?假设我有一个用C#编写的AnyCPU程序集,它导出一些代码和XAML用户控件。
这是一系列问题和答案,记录了我对现代NuGet包创作主题的研究结果,特别关注NuGet 3引入的变化。您可能也对一些相关问题感兴趣:
- How to package a .NET Framework library?
- How to package a portable .NET library targeting .NET Core?
- How to package a .NET library targeting .NET Framework and Universal Windows Platform and include platform-specific functionality?
- How to package a multi-architecture .NET library that targets the Universal Windows Platform?
- How to package a .NET library that targets the Universal Windows Platform and depends on Visual Studio extension SDKs?
答案 0 :(得分:12)
这个答案建立在principles used to package libraries targeting the .NET Framework之上。首先阅读链接的答案,以便更好地理解以下内容。
首先,您必须选中项目构建设置中的“生成库布局”复选框。如果没有这个,就不可能使用库导出的XAML用户控件。确保对所有构建配置和体系结构应用此设置。
除了基本的3个资产(参见上面链接的答案)之外,您还需要从构建输出目录中打包以下附加资产:
这些额外的资源是使用程序集导出的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包之前,请记住使用Release配置构建解决方案。有关更多详细信息,请参阅上面链接的有关打包.NET Framework库的答案。
示例库和相关的打包文件为available on GitHub。与此答案对应的解决方案是SimpleUwpLibrary。