UWP类库NuGet包XamlParseException错误

问题描述

当前,我正在开发UWP NuGet软件包,以使其更容易创建出色的弹出窗口和对话框。 目前,该项目尚处于起步阶段,没有太多控件,但我尝试为其创建一个NuGet软件包,以测试该项目是否完好。 除非我将应用程序与引用示例项目的类库一起使用,否则一切正常,但是从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上可用 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

enter image description here

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软件包,目标文件将输出到{{1} }

如果我安装了新版本bin\x86\Debug\Controls,则一切正常。 查看此内容:

enter image description here

不确定,如果您的问题是文件丢失或您想将其放入0.0.1.5-rc

如果是第二个问题,则应修改bin\x86\Debug\netcore50\Controls

使用此:

UWPPopupToolkit.props

之后,删除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