配置 azure devops 管道以打包和推送带有组件的 UWP 库

Configure an azure devops pipeline to pack and push a UWP library with components

我正在尝试使用 azure 管道 'publish'(构建、nuget 打包和推送)一个 UWP 库项目到私有 azure 工件提要。我在管道中使用经典编辑器,具有以下代理:

我可以成功打包 .csproj 文件,但是当我安装 nuget 包并使用库中的组件时,出现此错误:

严重性代码说明项目文件行抑制状态 错误 XDG0062 System.Reflection.TargetInvocationException:调用目标引发了异常。 ---> Windows.UI.Xaml.Markup.XamlParseException: XAML 解析失败。 在 Windows.UI.Xaml.Application.LoadComponent(对象组件、Uri resourceLocator、ComponentResourceLocation componentResourceLocation) 在 DeviceEnumerationAndPairing.Components.SerialDevicePicker..ctor() --- 内部异常堆栈跟踪结束 --- 在 System.RuntimeTypeHandle.CreateInstance(RuntimeType 类型,布尔值 public DevTest MainPage.xaml 14

我想我需要使用 .nuspec 告诉 NuGet 包将组件的 .xaml 和 .xbf 文件复制到 .nupkg。我在 .nuspec 中输入了以下内容:

<?xml version="1.0" encoding="utf-8"?>
<package>
  <metadata >
    <id>myfeedname.DeviceEnumerationAndPairing</id>
    <version>1.0.2</version>
    <title>DeviceEnumerationAndPairing</title>
    <authors>idldev</authors>
    <owners>idldev</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Internal uwp library for device enumeration and pairing</description>
    <releaseNotes>Development</releaseNotes>
    <tags>device serial pairing idl idldev</tags>
  </metadata >
  <files>
    <!-- WinMd and IntelliSense -->
    <!-- XAML controls -->
    <file src="..\DeviceEnumerationAndPairing\bin\Release\DeviceEnumerationAndPairing.XML" target="lib\uap10.0"/>
    <file src="..\DeviceEnumerationAndPairing\obj\Release\embed\DeviceEnumerationAndPairing\Components\SerialDevicePicker.xbf" target="lib\uap10.0\Components"/>
    <file src="..\DeviceEnumerationAndPairing\bin\Release\DeviceEnumerationAndPairing\Components\SerialDevicePicker.xaml" target="lib\uap10.0\Components"/>
    <!-- DLLs and resources -->
    <file src="..\DeviceEnumerationAndPairing\bin\Release\DeviceEnumerationAndPairing.dll" target="runtimes\win10-arm\native\DeviceEnumerationAndPairing.dll"/>
    <file src="..\DeviceEnumerationAndPairing\bin\Release\DeviceEnumerationAndPairing.pri" target="runtimes\win10-arm\native\DeviceEnumerationAndPairing.pri"/>
    <file src="..\DeviceEnumerationAndPairing\bin\Release\DeviceEnumerationAndPairing.dll" target="runtimes\win10-x64\native\DeviceEnumerationAndPairing.dll"/>
    <file src="..\DeviceEnumerationAndPairing\bin\Release\DeviceEnumerationAndPairing.pri" target="runtimes\win10-x64\native\DeviceEnumerationAndPairing.pri"/>
    <file src="..\DeviceEnumerationAndPairing\bin\Release\DeviceEnumerationAndPairing.dll" target="runtimes\win10-x86\native\DeviceEnumerationAndPairing.dll"/>
    <file src="..\DeviceEnumerationAndPairing\bin\Release\DeviceEnumerationAndPairing.pri" target="runtimes\win10-x86\native\DeviceEnumerationAndPairing.pri"/>
    </files>
</package>

..但是无论我是在 'NuGet pack' 中指定仅使用 .nuspec 还是同时指定 .nuspec 和 .csproj,我都会在尝试安装 nuget 包时收到以下错误:

严重性代码说明项目文件行抑制状态 错误 NU1202 Package idldev.DeviceEnumerationAndPairing 1.0.1-CI-20200421-150456 与 uap10.0.18362 (UAP,Version=v10.0.18362) 不兼容。包 idldev.DeviceEnumerationAndPairing 1.0.1-CI-20200421-150456 不支持任何目标框架。

..对于 win10-arm, win10-x86...

我认为我需要添加依赖项或 .target 文件?但我在黑暗中拍摄了一点。我知道那里有一些类似问题的问题,所以希望这不是重复的,并且它是有道理的。任何帮助表示赞赏...

您可以先查看这些提示:

1.In 您的第 3 步,您在尝试为 win10-arm、win10-x86 选择程序集时使用 any cpu 模式构建解决方案 ...

不同于在VS中本地构建,管道中的VS构建任务不支持batch build。因此您需要使用不同的平台多次构建解决方案。

2.Check Package 来自的源项目的目标框架。您应该确保包的目标框架支持您要在其中安装包的项目。(TargetPlatformVersionTargetPlatformMinVersion

3.Check 如果您为发布配置生成 xml 文档。检查打包项目的csproj文件,是否存在这一行?:<DocumentationFile>bin\Release\xxxx.XML</DocumentationFile>

4.Here的one detailed document about how to pack uwp package. You can refer to it for more details. According to that、XAML文档应放入Themes文件夹。