Почему дизайнер WPF не может загрузить библиотеки, которые обращаются в неуправляемые библиотеки DLL? - PullRequest
5 голосов
/ 18 мая 2011

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

  1. C ++ DLL
  2. C ++ / CLI DLL, которая использует# 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 ищет динамические библиотеки.

Ответы [ 2 ]

7 голосов
/ 18 мая 2011

Поскольку дизайнер Visual Studio копирует ваши сборки во временное расположение, но не копирует ваши неуправляемые зависимости, вы можете столкнуться с этой проблемой.

Самое простое решение, хотя и не идеальное, - это добавитьпапку, содержащую ваши неуправляемые зависимости для переменной среды PATH, а затем запустите DevEnv.exe с этим PATH.

. Это можно сделать одним из следующих способов:

  • ДобавлениеПерейдите в папку с переменными среды системы, используя Компьютер -> Свойства
  • Использование пакетного файла, который задает путь и затем запускает DevEnv

Проблема с этим решением заключается в том, что неуправляемые зависимостиперестроенная Visual Studio имеет тенденцию «зависать» на них или не использовать новые, поэтому вам в конечном итоге придется выходить и перезапускать Visual Studio после использования дизайнера для правильной полной перестройки всего, и это может быть немного болезненно.

0 голосов
/ 29 августа 2018

Не реальное решение, но иногда оно помогает: пересобрать с помощью «AnyCPU» (не «x64», потому что конструктор - это 32-битный процесс) и в режиме «Release» закройте и снова откройте Visual Studio. И да: это очень раздражает ...

...