[c#] 이름 <…>이 네임 스페이스 clr-namespace <…>에 없습니다.

잘 컴파일하는 데 사용되었지만 더 이상 그렇지 않은 작은 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}">

그리고 내가 얻는 오류는 다음과 같습니다.
http://i48.tinypic.com/5u1u8w.png

이것은 스크린 샷에있는 하나의 파일이 아니라이 프로젝트의 모든 사용자 컨트롤 / 창 파일에서 xaml에서 유사한 방식으로 추가하는 모든 참조입니다.

그래서 파일이 있고, 파일의 네임 스페이스가 정확하고, xaml 파일의 네임 스페이스 / 클래스 이름이 (내 이해로는) 정확합니다. xaml을 입력하면 intellisense가 표시되므로 파일을 정상적으로 찾지 만 컴파일 할 때는 찾지 못합니다.

다른 게시물에서 이에 대한 가장 일반적인 솔루션은 .net 프레임 워크 버전입니다. 현재 메인 및 테스트 프로젝트 모두에 대해 .Net Framework 4로 설정되어 있습니다. 클라이언트 프로필이 아닌 정식 버전입니다.

내가 엉망이라고 생각하는 것은 다음과 같습니다
. 구성 관리자에서 두 프로젝트 모두 플랫폼이 Any CPU로 설정되어 있지만이 문제를 해결하려고 할 때 메인 프로젝트가 x86으로 설정되고 테스트 프로젝트가 Any로 설정되어 있음을 알았습니다. CPU. 그래서 구성 관리자의 기본 프로젝트에 대해 모든 CPU를 수동으로 추가했습니다. 그러나 나는 내가 이것을 올바르게했는지 또는 그것을해야하는지에 대해 솔직히 모른다. 추가 질문으로 구성 관리자를 기본 상태로 재설정 할 수있는 방법이 있습니까? 이것이 주요 문제에 대해 말할 것이 있습니까? 주 프로젝트가 항상 x86으로 설정되었는지 여부 또는 어떻게 든 x86으로 변경 한 다음 깨 졌는지 모르겠습니다. 언급했듯이이 프로젝트는 잠시 동안 잘 컴파일되었습니다.



답변

그런 일이 발생할 때마다 저는 Visual Studio를 다시 시작하고 솔루션을 다시 빌드했는데 제대로 작동했습니다. 이유를 말할 수 없습니다.


답변

“Does not exist in the namespace”메시지 외에도 디자이너로부터 x64 및 ARM 타겟에 대한 창을 표시 할 수 없다는 메시지도 받았습니다.

방금 빌드를 x86 모드로 전환하고 다시 빌드 솔루션을 수행 한 다음 x64 모드로 다시 전환 한 다음 다시 빌드하면 [둘 다] 문제가 해결된다는 것을 알았습니다.

x64 솔루션을 재 구축하기 만해도 아무 일도 일어나지 않았습니다.


답변

도움이 된 것은 (특히에서이 오류가 발생하는 경우 App.xaml) 문제를 일으키는 참조주석 처리하고 다시 빌드 한 다음 주석 해제하는 것입니다. 이것이 하는 일은 오류시 빌드를 중지하는 대신 전체 프로젝트가 실제로 빌드 할 수 있도록하는 것입니다.

내가 수집 할 수있는 바에 따르면 앱은 특정 순서로 파일을 빌드하려고 시도하고 있으므로 App.xaml참조에있는 다른 클래스 파일 오류가 있을 때 오류를 일으키는 파일이 올바르게 컴파일되지 않았으므로 그 이유는 해당 네임 스페이스에서 파일을 찾을 수 없습니다.


답변

이것이 Visual Studio 2012 (업데이트 3)에서 저에게 효과적이었습니다.

  • Visual Studio 다시 시작
  • 네임 스페이스 선언에 현재 어셈블리 추가 xmlns:framework="clr-namespace:TimeRecorder.Framework;assembly=MyAssembly
  • Build -> Build Solution


답변

솔루션을 다시 빌드하십시오 (때로는 정리 한 다음 빌드가 더 잘 작동 함). 그런 다음 오류 목록을보고 맨 아래로 스크롤하면 어셈블리 컴파일을 허용하지 않는 오류를 나타낼 가능성이 큽니다. XAML 컴파일러는 새 어셈블리가 아닌 캐시 된 어셈블리 버전을 사용하고있을 가능성이 높습니다. 구축을 의미합니다.


답변

비슷한 문제가있었습니다. 제 경우에는 다음을 수행해야했습니다.

  • xaml에서 참조 마크 업을 제거합니다 (이 예에서는 <local:HistoryViewModel x:Key="ViewModel"/>).
  • 클래스를 빌드하십시오 (이 예제 파일에는 HistoryViewModelclass 가 포함되어 있습니다 )
  • 빌드되면 xaml에 참조 마크 업을 추가합니다.
  • 다시 짓다

위의 방법이 저에게 효과적이었습니다.


답변

나를 위해 일한 것 :-디버그에서 릴리스로 솔루션 구성 전환-릴리스에서 디버그로 구성 전환