Почему конструктору WPF не удается загрузить библиотеки, вызывающие неуправляемые библиотеки DLL?

Я использую Visual Studio 2008, .NET 3.5 SP1 и имею тестовое приложение со следующими модулями:

  1. C ++ DLL
  2. DLL C ++ / CLI, которая использует # 1
  3. приложение C # WPF, которое использует # 2

Когда я пытаюсь использовать классы из # 2 в качестве ресурсов в WPF XAML, дизайнер не разрешает мне:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:lib1="clr-namespace:ClassLibrary1;assembly=ClassLibrary1" <- ERROR 

Ошибка: «Сборка 'ClassLibrary1' не найдена. Убедитесь, что вы не пропустили ссылку на сборку. Также убедитесь, что ваш проект и все сборки, на которые есть ссылки, были построены».

Но когда я использую класс из C ++ / CLI DLL в коде главного окна приложения, все работает нормально. Создается Class1, и в своем конструкторе он вызывает C ++ DLL, нет проблем.

using ClassLibrary1;

...

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();

        //use in code-behind
        Class1 tmp = new Class1();
        tmp.FirstName = "foo";
        Title = tmp.FirstName;
    }
}

Если я изменю сборку C ++ / CLI, удалите его вызов в C ++ DLL и перестройте все, дизайнер перестает жаловаться и загружает сборку C ++ / CLI без жалоб.

Я подозреваю, что эта проблема как-то связана с тем, где дизайнер WPF ищет динамические библиотеки.

5
задан Matthew Lowe 17 May 2011 в 20:22
поделиться