Подтвердить что ты не робот

Expression Blend: Получение ошибки "XXX" не существует в пространстве имен "XXX", но не в VS2008

Я пытаюсь использовать Blend 3.0 для редактирования проекта, который содержит некоторые элементы управления WPF. Этот проект уже компилируется и отлично работает с Visual Studio 2008.

В Blend, однако, я получаю загадочные ошибки, которые не имеют никакого смысла:

Например, у меня есть класс, который происходит от элемента управления:

namespace Company.WPFControls.SearchTextBox
{
    public class SearchTextBox : Control
    {
        ...
    }
}

И я пытаюсь использовать его в ресурсе, в той же сборке, для назначения стиля:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:Company.WPFControls.SearchTextBox" 

    <Style TargetType="{x:Type local:SearchTextBox}">
        ...
    </Style>
</ResourceDictionary>

В Blend появляется следующая ошибка:

Имя "SearchTextBox" не существуют в пространстве имен "CLR-имен: Company.WPFControls.SearchTextBox".

Я попытался указать имя сборки, добавив ;assembly=Company.WPFControls, но не удалив ошибку.

Есть ли способ исправить это или, по крайней мере, выяснить, откуда возникла проблема?

4b9b3361

Ответ 1

У меня была такая же проблема с Blend 2, на Windows Vista 64.

Я обычно компилирую свое решение в VS2008 с целью "Отладка - x86" во всех моих проектах, так что он совместим с некоторыми другими 32-битными проектами.

Похоже, Blend любит цели "Отладка - любой процессор". Я в основном изменил свой менеджер конфигурации, чтобы он нацелился на любые платформы процессора вместо x86.

Итак...

  • Откройте свое решение в Blend и VS2008
  • В VS2008 выберите меню Сборка → Configuration Manager
  • Убедитесь, что ваше решение у конфигурации есть "Debug - Any CPU", для всех проектов
  • Скомпилировать в VS2008
  • tadaaaa Ваш проект blend должен обновлять и удалять эти ошибки... хорошо это сделало для меня

Я сделал противоположное, чтобы проверить, действительно ли это так, и кажется да... Я просто вернул решение обратно в Debug-x86, очистил все и перестроил, и я все еще был с ошибкой "Делает не существует [...]"

Что касается "Почему?"... Я не знаю, но по крайней мере сейчас это работает!

Ответ 2

Проблема заключается в пути поиска сборки Blend. По умолчанию он ищет классы в сборках в папке "bin\Debug"! Но если вы установите в целевой конфигурации проекта x86, то ваш путь вывода будет "bin\x86\Debug". Поэтому вам нужно изменить свой выходной путь в visual studio на "bin\Debug", а Blend найдет все ваши классы!

Ответ 3

Я думаю, что Blend использует конфигурацию/платформу по умолчанию, определенную в файле проекта. Вы должны исправить это, отредактировав его с помощью текстового файла. Если вы посмотрите в свой .csproj файл, вы должны увидеть что-то вроде этого:

<PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    ...

Измените значение AnyCPU на x86 и оно должно работать так, как вы ожидаете.

Ответ 4

Вы также можете исправить эту проблему "Любой процессор /x 86", изменив путь вывода для всех ваших проектов на bin\Debug вместо bin\x86\Debug (то же самое для Release).

Ответ 5

У меня также была ошибка. Но для меня это помогло перестроить проект непосредственно в Blend без использования Visual Studio.

Для тех, кто не знает: вы можете сделать это в Blend в меню, нажав "Project" → "Rebuild Project". По крайней мере, в Blend 4.