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
文件夹中不会自动将其复制到构建输出文件夹中,只有 dll
、pdb
和 xml
文件将自动添加到输出项目中。
由于你附加的文件不是同一类型,所以你的方法无法得到你想要的。所以我建议你可以试试这个:
解决方案
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同时删除bin
, obj
或主项目的任何输出文件夹。
=================================
更新 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
目前我正在开发一个 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
文件夹中不会自动将其复制到构建输出文件夹中,只有 dll
、pdb
和 xml
文件将自动添加到输出项目中。
由于你附加的文件不是同一类型,所以你的方法无法得到你想要的。所以我建议你可以试试这个:
解决方案
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同时删除bin
, obj
或主项目的任何输出文件夹。
=================================
更新 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