Выражение 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.