【问题标题】:How can I ensure that a UserControl defined in a class library is included in a NuGet package?如何确保在类库中定义的 UserControl 包含在 NuGet 包中?
【发布时间】:2016-05-26 20:02:40
【问题描述】:

我需要使用 UWP 项目的通用 Windows 类库中定义的 UserControl,该项目将该类库作为依赖项。 (两个程序集都是我的。)在以前的项目中,当实现 UserControl 的项目是同一解决方案的一部分时,这工作得很好。对于我当前的项目,我将类库用作 NuGet 包。当尝试使用 NuGet 包中的 UserControl 时,一切都会构建,但在运行时加载包含 UserControl 的页面时会立即引发 XamlParseException。

我找到了this related question,它引导了我here,这很有启发性(似乎由于某种原因,为用户控件生成的二进制文件不会自动包含在 NuGet 包中),但建议的解决方案没有适合我的需要。建议似乎是将某些输出文件(*.xr.xml、*.pri、*.xbf)从一个项目的“bin”手动移动到另一个项目的“bin”,但这似乎不可持续。如果在 NuGet 包中包含这些特定文件是答案,那么我该如何自动执行此操作?我可以为“nuget pack”提供一些特定的参数集吗?如果我需要包含 .nuspec 文件,我需要包含什么才能获得正确的文件?

我的项目和工作流程的一些额外背景,以防相关:我正在使用 Xamarin 和 MvvmCross 构建一个跨平台应用程序,目前针对 UWP 和 Android。定义我的用户控件的类库是我的 UWP 项目所依赖的通用 Windows 类库。我正在使用 Visual Studio Team Services 为我的每个程序集托管存储库;签入后,它们会自动构建、测试、打包并发布到内部提要,在那里它们可能会被依赖它们的项目获取。我正在寻找一种解决方案,使我能够自动将所有必需的输出文件包含在我的 NuGet 包中,以便我可以保持这种自动化水平。

【问题讨论】:

    标签: c# xaml nuget uwp azure-artifacts


    【解决方案1】:

    简短的回答是否定的。目前没有一组命令可以神奇地完成这项工作。您必须手动指定所需的文件集。

    另外需要注意的是,您可能不需要在 NuGet 包中包含 .xbf 文件。 XAML 编译器会将所有 Xaml 文件(除非被覆盖)转换为 .xbf,即使是那些来自引用的扩展 SDK 或 NuGet 包的文件。但是,您确实需要包含 Xaml 文件,因为它既能让 Xaml 设计器工作,又是 Xaml 编译器的输入。

    您还可以考虑编写一个脚本来读取 csproj 并根据需要使用作为预打包和构建后步骤所需的内容更新 nuspec。

    Tim Heuer 的帖子here 是一个很好的阅读主题

    【讨论】:

    • 感谢您的链接和其他见解,我会阅读该帖子,看看它是否可以帮助我解决我的问题!
    • 这真的很有帮助。我已经解决了这个问题,现在我可以使用我的 NuGet 包中的 UserControl。为了让任何阅读本文遇到类似问题的人受益,我最终修改了 .nuspec 文件以包含程序集的 .dll、.pri 和 .xr.xml,以及 UserControl 的 .xbf。之后,它就开始工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 2020-03-14
    • 1970-01-01
    相关资源
    最近更新 更多