У меня есть небольшое приложение WPF, которое раньше прекрасно компилировалось, но теперь его нет. Я не могу точно сказать, в какой момент он прекратил строительство. Просто однажды он работал нормально, а на следующий - нет.
Вот структура проекта:
Нет других проектов или внешних ссылок, кроме стандартных .net dll.
Вот пользовательский элемент управления, в котором возникла проблема:
<UserControl x:Class="TimeRecorder.HistoryUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:TimeRecorder.ViewModel"
xmlns:framework="clr-namespace:TimeRecorder.Framework"
mc:Ignorable="d" Height="Auto" Width="Auto" Padding="5">
<UserControl.Resources>
<local:HistoryViewModel x:Key="ViewModel"/>
<framework:BoolToColorConverter x:Key="ColorConverter"/>
</UserControl.Resources>
<StackPanel DataContext="{StaticResource ViewModel}">
И вот ошибка, которую я получаю:
Обратите внимание, что это не только один файл на снимке экрана, но и все ссылки, которые я добавляю аналогичным образом в xaml во все файлы пользовательских элементов управления / окон в этом проекте.
Итак, файл есть, пространство имен в файле правильное, пространство имен / имя класса в файле xaml (насколько я понимаю) правильное. Я получаю intellisense, когда набираю xaml, поэтому он находит файлы в порядке, но не при компиляции.
Наиболее распространенным решением для этого в других сообщениях была версия .NET Framework. В настоящее время для моего основного и тестового проекта установлено значение .Net Framework 4. Полная версия, а не профиль клиента.
Вот что, как мне кажется, я напутал: в диспетчере конфигурации у обоих проектов платформа установлена на Any CPU, но в какой-то момент, пытаясь решить эту проблему, я заметил, что основной проект был установлен на x86, а тестовый проект был установлен на Any ПРОЦЕССОР. Поэтому я вручную добавил Any CPU для основного проекта в диспетчере конфигурации. Однако я, честно говоря, не знаю, правильно ли я сделал или даже должен ли я это сделать. Итак, в качестве дополнительного вопроса, есть ли способ сбросить диспетчер конфигурации до состояния по умолчанию? Будет ли это что-нибудь сказать о главной проблеме? Я не знаю, был ли основной проект всегда установлен на x86 или нет, или я как-то изменил его на x86, а затем он сломался. Как уже упоминалось, этот проект некоторое время компилировался нормально.
Ответы:
Каждый раз, когда это случалось со мной, я просто перезапускал визуальную студию, переделывал решение, и оно работало нормально ... не могу сказать почему
источник
В дополнение к сообщению «не существует в пространстве имен» я также получал сообщение от дизайнера о том, что он не может отобразить окно для целей x64 и ARM.
Я только что обнаружил, что переключение сборки в режим x86, выполнение решения по перестройке, затем переключение обратно в режим x64 и повторное восстановление устраняет [обе] проблемы.
Простое восстановление решения x64 ничего не дало.
источник
Что я обнаружил, что помогло (особенно если эта ошибка возникает
App.xaml
), так это закомментировать ссылки, вызывающие проблемы, перестроить, а затем раскомментировать. Я думаю, что это позволяет фактически построить весь проект, а не останавливать сборку при ошибке.Насколько я могу судить, приложение пытается построить файлы в определенном порядке, поэтому, когда
App.xaml
или предположительно любые другие ошибки файла класса в ссылке, файл, вызывающий ошибку, не был скомпилирован правильно, поэтому почему он не Не могу найти файл в этом пространстве имен.источник
the app is trying to build the files in a certain order
. Это заставило меня заглянуть в свой.csproj
файл. БылоApp.xaml.cs
первое место. Затем я переместил его под файл, который показал эту ошибку, перестроил, и ошибка исчезла. БЛАГОДАРЯ!Это то, что у меня сработало в Visual Studio 2012 (обновление 3).
xmlns:framework="clr-namespace:TimeRecorder.Framework;assembly=MyAssembly
Build
->Build Solution
источник
Перестройте свое решение (иногда лучше очистить, а затем собрать). Затем посмотрите на свой список ошибок, прокрутите до самого низа, и он, скорее всего, укажет на ошибку, которая не позволяет вашей сборке скомпилировать, и компилятор XAML, скорее всего, использует кешированную версию сборки, а не новую, которую вы значит построить.
источник
У меня была аналогичная проблема. В моем случае мне пришлось сделать следующее
<local:HistoryViewModel x:Key="ViewModel"/>
)HistoryViewModel
класс)Вышеупомянутый метод сработал для меня.
источник
Что сработало для меня: - Переключить конфигурацию решения с Debug на Release - Переключить конфигурацию обратно с Release на Debug
источник
Загляните в эту проблему сегодня с Visual Studio 2017 Community Edition. Пробовал все предложения здесь (сброс VS 2017, изменение с x64 на x32 и обратно и т. Д.) И из других источников безрезультатно. Intellisense знает, что все есть, но я каждый раз получал одну и ту же ошибку.
Во всяком случае, мое решение оказалось очень простым ... не всегда ли они случаются, когда вы потратили пару часов на решение проблемы!
По сути, я сделал следующее ...
Кажется, что, получив успешную сборку, он должен сбросить «что-то» в VS и / или сборке. После успешной сборки попробуйте снова вставить свой код.
источник
Ни одно из решений не помогло мне. Я исправил это так:
источник
Если бы эта проблема ходила кругами, теряя несколько часов. Я переместил в проект отдельную dll пользовательского элемента управления, чтобы она была скомпилирована в проекте, а не на dll. Это сломало весь проект, поэтому я тщательно проверил все пространства имен, пути и имена файлов. Пытался удалить файлы obj, переключаясь между выпуском и отладкой, между x86 и AnyCPU. Открытие сохранения всего, перекомпиляция все равно без радости.
Помните, что ранее была аналогичная проблема, ошибка, отмеченная в VS2013, не была напрямую связана с тем, где мне пришлось изменить XAML, а с использованием
x:Name="myControl"
на всех элементах управления вместо
Name="myControl"
починил это.
источник
Я изменил Target Framework My Application с ".Net Framework 4.5" на ".Net Framework 4.6", и это сработало!
источник
Вот странный пример подобного:
<UserControl x:Class="Gtl.Ui.Controls.WaitControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:controls="clr-namespace:Gtl.Ui.Controls" mc:Ignorable="d" d:DesignHeight="120" d:DesignWidth="120" Background="Transparent"> ... </UserControl>
будет компилироваться (VS2013).
<UserControl x:Class="Gtl.Ui.Controls.WaitControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:controls="clr-namespace:Gtl.Ui.Controls" mc:Ignorable="d" d:DesignHeight="120" d:DesignWidth="120" Background="Transparent" IsVisibleChanged=onIsVisibleChanged> ... </UserControl>
выдает ошибку «тип Ui не найден в Gtl.Ui.Gtl» (и я уверяю вас, что метод обработчика существует в коде программной части). Обходной путь - добавить обработчик в конструктор класса, но давай, Microsoft, wtf продолжается?
источник
Я столкнулся с той же проблемой, когда пытался вызвать пространство имен в xaml. показывал, что класс недоступен в пространстве имен. Я много искал. Наконец я обнаружил, что эта проблема связана с VS. Я использую VS 2013. Я пробовал следующие шаги:
+ Изменить
xmlns:VM="clr-namespace:MyFirstAppViewModel"
к
xmlns:VM="clr-namespace:MyFirstAppViewModel;assembly=ViewModel"
источник
Эта ошибка обычно возникает, когда проект не был успешно построен во время последней сборки.
Шаг 1) Сначала удалите весь код, вызывающий ошибку, из файла XAML или .cs, а затем создайте и запустите проект, нажав F5.
Шаг 2) Добавьте один за другим свой код ошибки в XAML.
источник
x:Key="ViewModel"
возможно, есть глюкlocal:
введете, покажет ли VSHistoryViewModel
?Class
ISpublic
источник
Просто запустите анализ кода из меню сборки
источник
Я обнаружил, что выполнение команды «Выполнить анализ кода» заново создает все и почти всегда устраняет проблему (щелкните правой кнопкой мыши проект> Анализировать> Выполнить анализ кода). Это также обычно перестраивает файлы ресурсов, чтобы можно было найти строки и т. Д.
источник
Пробовал все решения в этой теме, но ни одно не помогло. Оказалось, что это связано с настройкой решения. Мое приложение WPF было настроено на сборку для X64 из-за некоторых собственных зависимостей, которые этого требуют, но конфигурация решения по-прежнему была установлена на AnyCPU для проекта. Создание новой конфигурации X64 для проекта в диспетчере конфигурации решения позволило конструктору XAML наконец распознать мой тип и пространство имен.
источник
Перед добавлением пространства имен в ваш .xaml-файл убедитесь, что у вас нет ошибок компиляции из-за существующего кода.
После того, как все проверки компиляции выполнены, перестройте решение и попробуйте добавить необходимое пространство имен для использования его класса или свойств.
источник
Для меня это повторяющаяся проблема. Однажды я нашел решение во вкладке «Предупреждение» . Это была проблема с версией .NET framework, и в ней говорилось следующее:
источник
Есть глюк с их буферизацией макетов объектов. Если что-то переименовывается или перемещается, оно теряется. Что обычно работает для меня, так это создать полностью новый класс и скопировать весь старый код, заставить его работать с новым классом, а затем удалить исходный класс. Иногда после того, как вы запустите его с новым именем класса, вы можете попробовать переименовать его обратно в исходное имя (но обычно нет)
источник
Я использовал xmlns: local = "using: MyRootNamespace.ChildNamespace" в заголовке файла .xaml и превратил его в xmlns: local = "clr-namespace: MyRootNamespace.ChildNamespace" ... ну, я просто позволил intellisense сделать работа, и это сработало.
источник
Проблема в том, что при создании целевого объекта x86 выходной путь для конкретного проекта устанавливается на bin \ x86 \ Debug. Похоже, что Expression blend это совсем не нравится. Кажется, его интересует только то, что находится в bin \ Debug.
Если вы изменили путь (пути) вывода для проекта x86, например, на bin \ debug, то я уверен, что вы обнаружите, что он будет работать. Ну, у меня все равно работает :)
источник
Целевая структура добавляемого файла .dll должна быть такой же, как целевая платформа вашего приложения.
источник
Я столкнулся с той же проблемой. Вы получаете эту ошибку, но все же можете успешно построить свой проект. Неудобство заключается в том, что вы не видите дизайн пользовательского интерфейса (или просто хотите очистить код и удалить надоедливые волнистые линии). Прочитал много постов, попробовал несколько вещей, но следование работает как шарм.
Пробовал это в Visual Studio 2019:
Щелкните правой кнопкой мыши свое решение -> Свойства -> Свойства конфигурации, затем измените конфигурации проекта с «Отладка» на «Выпуск» или наоборот.
После этого восстановите свое решение. Это может решить вашу проблему.
источник