我有带有Windows应用程序的C#WPF应用程序解决方案和实现某些视图和视图模型的类库DLL。我将Extended.Wpf.Toolkit程序包添加到DLL项目中,并在我的DLL项目中从XAML使用该程序包中的控件。可执行项目引用DLL项目。在我构建时,没有将软件包中的DLL复制到可执行项目的bin / Debug文件夹中(它们当然在DLL项目的bin / Debug中)。
DLL项目使用其他一些软件包,并且这些DLL会自动出现在可执行bin / Debug文件夹中。在Extended.Wpf.Toolkit中唯一的区别是,我没有使用此包中的任何东西进行任何代码隐藏。
我尝试使用Extended.Wpf.Toolkit中的随机类将一些伪代码添加到DLL项目中,然后其中一个DLL出现在bin中。因此,显然Visual Studio现在可以在某种程度上确认这种依赖性(尽管它仅复制一个DLL)。
DLL项目中的XAML:
<UserControl x:Class="MyNameSpace.PropertyPanel"
...
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
>
<Grid>
<xctk:PropertyGrid/>
</Grid>
</UserControl>
因此,显然我也需要将nuget包添加到可执行项目中吗?为什么使用来自XAML的程序包和代码隐藏程序之间会有区别?
如果重要,请使用Visual Studio 2017社区版。 nugetpackages.config位于类库项目中:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Extended.Wpf.Toolkit" version="3.6.0" targetFramework="net452" />
<package id="SharpVectors.Reloaded" version="1.3.0" targetFramework="net452" />
</packages>
很抱歉,缺少简单的可复制项目。
答案 0 :(得分:1)
为什么使用XAML软件包与隐藏代码之间有区别?
这是一个已知的XAML问题。编译器不会复制仅在XAML中使用的引用。
解决方法很简单。在类库项目中将程序集的Copy Local
属性设置为True
,在使用中的WPF application
项目中安装NuGet软件包。