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

11
在WPF项目中,即使将CopyLocal设置为true,只在xaml中使用的引用也不会被复制到bin文件夹中,这在此帖子中有所抱怨。在MVVM模式下,通常会使用第三方控件,而完全没有代码后置引用。

此帖子的启发,我正在使用下面的解决方法。这很容易,但是,人们必须手动维护变量列表,以使其与整个项目中实际在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> - NSGaga-mostly-inactive
这与RadControls无关,而<Private>标签是CopyLocal属性的实现。 - NS.X.
2个回答

9

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

例如:

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

我正在使用第三方依赖项来绑定标记,但显然这并不起作用... - Justin Pihony
1
这解决了我在 oxyplot 上的问题。谢谢! - Paw Baltzersen
看起来这个解决方案在控件只出现在控件模板中时无法工作。 - O. R. Mapper
很难相信这在VS2022中仍然是一个问题,但事实就是如此。 - Christof Wollenhaupt

2

这是一个与XAML代码相关的已知问题。在解析XAML代码时,可能会出现一些奇怪的情况,因为VisualStudio知道对应的DLL被使用了。对于我的情况,帮助我解决问题的方法是在代码后台类或项目中的任何类中创建特定DLL的任意对象属性。(解决方法)

例如:

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

我不得不使用相同的解决方法。这很烦人,但对我来说产生了良好且可靠的结果。 - Daniel Skovli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接