Сборка, используемая только в XAML, не копируется в папку bin

В проекте WPF ссылки, используемые только в xaml, не копируются в папку bin даже при CopyLocal установите в true, как жаловались в этом посте. При использовании шаблона 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.");
        }
    }
}

2 ответа

Решение

Обходной путь, который я использую, - убедиться, что у элемента есть имя, определенное в XAML. Это заставляет его создавать экземпляр для него в сгенерированном коде позади (частичного) класса. Этого достаточно для того, чтобы ссылочная следующая система обнаружила ссылку и скопировала в dll зависимости.

например:

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

Это известная проблема с XAML-кодом. Во время синтаксического анализа XAML-кода происходит нечто странное, поскольку VisualStudio знает, что используется соответствующая DLL. В моем случае это помогло создать Атрибут любого объекта из конкретной DLL в коде класса или любого класса в проекте. (Обход)

Например:

// This is only for the build process, to copy target assembly to output.
private RadTreeView _TreeViewForCompiler;
Другие вопросы по тегам