【问题标题】:Assembly only used in XAML is not copied to bin folder仅在 XAML 中使用的程序集不会复制到 bin 文件夹
【发布时间】:2012-04-29 23:53:20
【问题描述】:

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

this post 的启发,我正在使用以下解决方法。这很容易,但是,必须手动维护变量列表,使其与项目中 XAML 文件中实际使用的变量列表保持同步,这些变量列表会不断变化。我的问题是是否有真正的解决方案或更好的解决方法? (我知道使用构建后脚本的想法,恕我直言,它不太容易被发现并且更容易受到更改的影响。)

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.");
        }
    }
}

【问题讨论】:

  • 那是 RAD/Telerik——如果它在 GAC 中,你可以试试这个——<Private>True</Private>
  • 不是RadControls特有的,&lt;Private&gt;标签是CopyLocal属性的实现。

标签: wpf xaml msbuild copy-local


【解决方案1】:

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

例如:

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

【讨论】:

  • 我正在使用第三方依赖项来绑定标记,显然这不起作用...
  • 这解决了我的 oxyplot 问题。谢谢!
  • 如果控件只出现在控件模板中,这个解决方案似乎不起作用。
【解决方案2】:

这是 XAML 代码的一个已知问题。在解析 XAML 代码的过程中有些奇怪,因为 VisualStudio 知道使用了相应的 DLL。就我而言,它有助于从类后面的代码或项目中的任何类中的特定 DLL 创建任何对象的属性。 (解决方法)

例如:

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

【讨论】:

  • 我不得不使用相同的解决方法。这很烦人,但它为我带来了良好且可靠的结果。
猜你喜欢
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
  • 2011-04-21
  • 2023-02-09
  • 1970-01-01
  • 2011-02-28
相关资源
最近更新 更多