【问题标题】:How to package a .NET library targeting the Universal Windows Platform?如何打包面向通用 Windows 平台的 .NET 库?
【发布时间】:2016-04-09 06:56:46
【问题描述】:

如何以现代通用方式打包通用 Windows 平台库以通过 NuGet 发布?假设我有一个用 C# 编写的 AnyCPU 程序集,它导出一些代码和 XAML 用户控件。

这是一系列问题和答案,记录了我对现代 NuGet 包创作主题的发现,特别关注 NuGet 3 引入的更改。您可能还对一些相关问题感兴趣:

【问题讨论】:

    标签: .net xaml nuget uwp nuget-package


    【解决方案1】:

    此答案基于principles used to package libraries targeting the .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 库的答案。

    一个示例库和相关的打包文件是available on GitHub。这个答案对应的解决方案是SimpleUwpLibrary。

    【讨论】:

    • 真诚地感谢您!我在创建自己的 UWP 库时遇到了麻烦,我认为这已经解决了我的问题。
    • 另外:可以使用的不同 TFM(而不是 uap10.0)是 netcore50
    • MyUwpLibrary 子目录仅在对应构建配置的 GenerateLibraryLayout 标志设置为 true 时创建。
    猜你喜欢
    • 2016-04-09
    • 2016-04-09
    • 2016-04-09
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多