如何打包一个针对通用Windows平台的.NET库?

12
如何以现代通用的方式打包一个通用Windows平台库,以便通过NuGet发布?假设我有一个单独的AnyCPU程序集,使用C#编写,导出一些代码和XAML用户控件。
这是一系列关于现代NuGet包编写的问题和答案,特别关注NuGet 3引入的更改。您可能还对以下相关问题感兴趣: - .NET Framework库如何打包? - 如何打包针对.NET Core的可移植.NET库? - 如何打包针对.NET Framework和通用Windows平台的.NET库并包含平台特定功能? - 如何打包针对通用Windows平台的多架构.NET库? - 如何打包针对通用Windows平台的.NET库,并依赖于Visual Studio扩展SDK?
1个回答

12

本回答基于打包面向.NET Framework的库的原则。请先阅读链接中的答案以更好地理解以下内容。

首先,您必须在项目构建设置中勾选“生成库布局”复选框。如果没有这个设置,将无法使用由您的库导出的XAML用户控件。确保将此设置应用于所有构建配置和架构。

除了基本的三个资产(请参见上面链接的答案)之外,您还需要从构建输出目录中打包以下附加资产:

  • 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 包之前使用 Release 配置构建您的解决方案。有关打包 .NET 框架库的更多详细信息,请参阅上面链接的答案。

可在GitHub上获得示例库和相关打包文件。对应于此答案的解决方案为 SimpleUwpLibrary。


非常感谢您!我在创建自己的UWP库时遇到了麻烦,而我认为这个解决方案已经为我解决了问题。 - James Ko
另外,可以使用不同的TFM(而不是“uap10.0”)——“netcore50”。 - James Ko
只有在相应的构建配置中将GenerateLibraryLayout标志设置为true时,才会创建MyUwpLibrary子目录。 - halllo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接