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

В проекте WPF ссылки, используемые только в xaml, не копируются в папку bin даже с CopyLocal, установленным в true, как описано в этот пост. При использовании шаблона MVVM обычно используются сторонние элементы управления без ссылок на код.

Вдохновленный этот пост, я использую обходной путь ниже. Это достаточно просто, однако нужно вручную поддерживать список переменных в синхронизации с теми, которые фактически используются в файлах XAML в проекте, которые подвержены постоянным изменениям. Мой вопрос: есть ли реальное решение или лучшее обходное решение? (Я знаю идею использования пост-сборки script, которая ИМХО менее уязвима для обнаружения и более уязвима для изменений.)

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

Ответ 1

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

например:.

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

Ответ 2

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

Например:

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