仅在XAML中使用的程序集不会复制到bin文件夹

时间:2012-04-29 23:53:20

标签: wpf xaml msbuild copy-local

在WPF项目中,即使CopyLocal设置为true,也不会将仅在xaml中使用的引用复制到bin文件夹,如this post中所抱怨的那样。对于MVVM模式,通常使用第三方控件而根本没有代码隐藏引用。

this post的启发,我正在使用下面的解决方法。然而,这很容易,必须手动维护变量列表与整个项目中XAML文件中实际使用的变量列表同步,这些变量列表会不断变化。我的问题是,是否有真正的解决方案或更好的解决方法? (我知道使用post-build脚本的想法,IMHO不太容易发现并且更容易受到更改。)

internal static class BuildTricker
{
    private static readonly RadTreeView radTreeView;
    static BuildTricker()
    {
        // Set and get once to avoid compiler optimization.
        radTreeView = null;
        if (radTreeView != null)
        {
            throw new InvalidOperationException("This should never happen.");
        }
    }
}

2 个答案:

答案 0 :(得分:7)

我使用的解决方法是确保项目在XAML中定义了名称。这使它在后面(部分)类的生成代码中为它创建一个实例。这足以使引用跟随系统检测引用,并在依赖项dll中复制。

e.g:

<ts:HorizontalToggleSwitch IsChecked="{Binding ShowMyItemsOnly}"
                           CheckedContent="Show My Items Only"
                           UncheckedContent="Show All Items"
                           x:Name="NameRequiredForCopyLocal">

答案 1 :(得分:1)

这是XAML-Code的已知问题。在解析XAML-Code时有一些奇怪的东西,因为VisualStudio知道,使用了相应的DLL。对于我的情况,它有助于从类代码中的特定DLL或项目中的任何类创建任何对象的属性。 (解决方法)

例如:

// This is only for the build process, to copy target assembly to output.
private RadTreeView _TreeViewForCompiler;