UWP Class 库 NuGet 包 XamlParseException 错误

UWP Class Library NuGet package XamlParseException error

目前我正在开发一个 UWP NuGet 包,以便更轻松地创建出色的弹出窗口和对话框。 目前该项目是新生的,没有那么多控件,但我尝试为其创建一个 NuGet 包作为测试以确保它一切正常。 除非我将应用程序与引用示例项目的 class 库一起使用,否则一切正常,但从 NuGet 下载库后,我收到 XamlParseException 错误。 我搜索了一下,发现我应该在输出中添加一些 xaml、xbf 或其他东西,所以我尝试将以下行添加到我的 nuspec.

    <files>
    <!-- XAML controls -->

    <file src="Controls\MessageBoxControls\MessageBoxControl.xaml" target="lib\netcore50\Controls\MessageBoxControls"/>
    <file src="bin\Debug\UWPPopupToolkit\Controls\MessageBoxControls\MessageBoxControl.xbf" target="lib\netcore50\Controls\MessageBoxControls"/>

    <file src="Controls\PopupControlControls\PopupControl.xaml" target="lib\netcore50\Controls\PopupControlControls"/>
    <file src="bin\Debug\UWPPopupToolkit\Controls\PopupControlControls\PopupControl.xbf" target="lib\netcore50\Controls\PopupControlControls"/>

    <file src="Controls\SlideupPopupControls\SlideupPopup.xaml" target="lib\netcore50\Controls\SlideupPopupControls"/>
    <file src="bin\Debug\UWPPopupToolkit\Controls\SlideupPopupControls\SlideupPopup.xbf" target="lib\netcore50\Controls\SlideupPopupControls"/>

    </files>

但我仍然遇到同样的错误,知道如何解决吗? 我应该提到该项目目前在 Github 上可用 link https://github.com/NGame1/UWPPopupToolkit NuGet 包也可在此处获得 https://www.nuget.org/packages/UWPPopupToolkit

简单地将内容文件放在 nuget 包的 lib 文件夹中不会自动将其复制到构建输出文件夹中,只有 dllpdbxml 文件将自动添加到输出项目中。

由于你附加的文件不是同一类型,所以你的方法无法得到你想要的。所以我建议你可以试试这个:

解决方案

1) 在项目的根目录中创建一个名为 build 的文件夹,然后添加一个名为 <package_id>.props 的文件。

注意:该文件必须与您的 nuget 包同名,这样它才能工作。 举个例子,如果你的nuget项目命名为UWPPopupToolkit.0.0.1-rc.nupkg,文件必须命名为UWPPopupToolkit.props.

2) 将这些内容添加到 UWPPopupToolkit.props 文件中:

<Project>
    <Target Name="OutputExtraFiles" BeforeTargets="Build">
        <ItemGroup>
            <File Include="$(MSBuildThisFileDirectory)..\File\**\*.*"></File>
        </ItemGroup>
        <Copy SourceFiles="@(File)" DestinationFiles="$(TargetDir)\%(RecursiveDir)%(Filename)%(Extension)"></Copy>  
    </Target>
</Project>

3) 像这样修改你的 UWPPopupToolkitSDK.nuspec 文件:

 <files>
        <!-- XAML controls -->

        <file src="Controls\MessageBoxControls\MessageBoxControl.xaml" target="File\Controls\MessageBoxControls"/>
        <file src="bin\Debug\UWPPopupToolkit\Controls\MessageBoxControls\MessageBoxControl.xbf" target="File\Controls\MessageBoxControls"/>

        <file src="Controls\PopupControlControls\PopupControl.xaml" target="File\Controls\PopupControlControls"/>
        <file src="bin\Debug\UWPPopupToolkit\Controls\PopupControlControls\PopupControl.xbf" target="File\Controls\PopupControlControls"/>

        <file src="Controls\SlideupPopupControls\SlideupPopup.xaml" target="File\Controls\SlideupPopupControls"/>
        <file src="bin\Debug\UWPPopupToolkit\Controls\SlideupPopupControls\SlideupPopup.xbf" target="File\Controls\SlideupPopupControls"/>
        <file src="build\UWPPopupToolkit.props" target="build" />
    </files>

4)然后重新打包你的nuget项目,在你安装新版本的nuget包之前,请clean the nuget caches first同时删除binobj 或主项目的任何输出文件夹。

=================================

更新 1

在我这边,清理所有nuget缓存或者删除C:\Users\xxx(current user)\.nuget\packages下的所有缓存文件,然后安装新版本的nuget包,输出目标文件到 bin\x86\Debug\Controls,

如果我安装新版本 0.0.1.5-rc,一切正常。 看到这个:

不确定您的问题是文件丢失还是您想将它们放入 bin\x86\Debug\netcore50\Controls.

如果你的问题是第二种,你应该修改你的UWPPopupToolkit.props,

使用这个:

<Copy SourceFiles="@(File)" DestinationFiles="$(TargetDir)netcore50\%(RecursiveDir)%(Filename)%(Extension)"></Copy> 

之后,删除 bin 和 obj 文件夹,然后再次重建主项目。

感谢@Perry Qian-MSFT 最后,我能够解决这个问题。 像这样添加文件

<files>
<!-- Dll -->
<file src="bin\Release\UWPPopupToolkit.dll" target="lib\netcore50" />

<!-- Resources -->
<file src="bin\Release\UWPPopupToolkit.pdb" target="lib\netcore50" />
<file src="bin\Release\UWPPopupToolkit.pri" target="lib\netcore50" />

<!-- IntelliSense -->
<file src="bin\Release\UWPPopupToolkit.XML" target="lib\netcore50" />

<!-- XAML control -->
<file src="bin\Release\UWPPopupToolkit\**\*.*" target="lib\netcore50\UWPPopupToolkit" />

<!-- Icon -->
<!--<file src="..\icon.png" target="images\" />-->
</files>

解决了问题。 您可以在此处找到结果文件:UWPPopupToolkitSDK.nuspec | UWPPopupToolkit.props | UWP Popup Toolkit Github