Выражение Blend: Ошибка "XXX" не существует в пространстве имен "XXX", но отсутствует в VS2008

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

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

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

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-namespace:Company.WPFControls.SearchTextBox".

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

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

5 ответов

Решение

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

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

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

Так...

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

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

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

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

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

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

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

Вы также можете исправить эту проблему "Any CPU/x86", изменив путь вывода для всех ваших проектов на bin\Debug вместо bin\x86\Debug (то же самое для выпуска).

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

Для тех, кто не знает: Вы можете сделать это в Blend в меню, нажав "Проект" -> "Перестроить проект". По крайней мере, в смеси 4.

Другие вопросы по тегам