programing

<...>라는 이름> 네임스페이스 clr-message <...>

telebox 2023. 5. 2. 22:36
반응형

<...>라는 이름> 네임스페이스 clr-message <...>

예전에는 잘 컴파일되었지만 더 이상 그렇지 않은 작은 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을 입력하면 인텔리센스가 생성되므로 파일은 그때는 괜찮지만 컴파일할 때는 그렇지 않습니다.

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

제가 실수한 것은 다음과 같습니다. 구성 관리자에서 두 프로젝트 모두 플랫폼이 임의 CPU로 설정되어 있지만, 이 문제를 해결하려고 할 때 기본 프로젝트가 x86으로 설정되어 있고 테스트 프로젝트가 임의 CPU로 설정되어 있다는 것을 알게 되었습니다. 그래서 구성 관리자에서 기본 프로젝트에 대해 수동으로 임의 CPU를 추가했습니다.하지만 저는 솔직히 제가 이것을 제대로 했는지 아니면 해야 하는지 모르겠습니다.추가적인 질문으로 구성 관리자를 기본 상태로 재설정할 수 있는 방법이 있습니까?이것이 주요 문제와 관련이 있습니까?메인 프로젝트가 항상 x86으로 설정되어 있었는지, 아니면 제가 어떻게든 x86으로 변경했다가 고장난 건지 모르겠습니다.언급했듯이 이 프로젝트는 한동안 잘 편집되었습니다.

매번 이런 일이 일어날 때마다 저는 그저 비주얼 스튜디오를 다시 시작하고 솔루션을 다시 구축했으며 제대로 작동했습니다.이유를 알 수 없습니다

디자이너로부터 "이름 공간에 존재하지 않습니다"라는 메시지 외에도 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"/>)
  • 클래스를 빌드합니다(이 예제 파일에는 다음이 포함됩니다).HistoryViewModel class )
  • 빌드가 완료되면 xaml에 참조 마크업을 추가합니다.
  • 재구축

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

Visual Studio 2017 Community Edition에서 오늘 이 문제를 발견했습니다.여기서 모든 제안을 시도했지만(리셋 VS 2017, x64에서 x32로 변경 및 다시 되돌리기 등) 다른 소스에서 시도했지만 소용이 없었습니다.인텔리센스는 모든 것이 존재한다는 것을 알고 있지만 매번 같은 오류가 발생했습니다.

어쨌든, 제 해결책은 매우 간단했습니다... 문제를 해결하는 데 두 시간을 소비하면 항상 그렇지 않습니까!

기본적으로, 저는 다음과 같은 일을 했습니다.

  1. xaml 파일에서 문제가 되는 코드 제거(내 경우에는 3줄만)
  2. 프로젝트를 빌드하여 성공적인 빌드 수행
  3. 이 시점에서 레이아웃이 디자이너 창에 마법처럼 나타나서 좋은 징조였습니다.
  4. xmlns: 항목을 포함하여 포인트 1에서 제거한 코드를 다시 삽입했습니다.
  5. 이 시점에서 당신은 어떤 파란 꼬깃꼬깃거리도 얻지 말아야 합니다...바라건대.
  6. 프로젝트 다시 빌드

빌드를 성공적으로 수행하려면 VS 및/또는 어셈블리 내에서 '뭔가'를 재설정해야 하는 것 같습니다.빌드에 성공하면 코드를 다시 삽입해 보십시오.

이 문제가 돌고 도는 데 몇 시간을 허비했습니다.나는 프로젝트에 별도의 사용자 제어 dll을 이동하여 참조된 dll이 아닌 프로젝트에 컴파일되었습니다.이로 인해 프로젝트 전체가 중단되었기 때문에 모든 네임스페이스, 경로 및 파일 이름을 꼼꼼하게 확인했습니다.x86과 AnyCPU 사이에서 obj 파일을 삭제하고 릴리스와 디버그를 변경했습니다.모두 저장하고 다시 컴파일하는 것은 여전히 즐겁지 않습니다.

이전에도 유사한 문제가 있었지만 VS2013에서 플래그가 지정된 오류는 XAML을 수정해야 하는 위치와 직접적인 관련이 없고 다음을 사용하여

x:Name="myControl"

대신 모든 제어 장치에서

Name="myControl"

고쳤습니다.

어떤 해결책도 저에게 효과가 없었습니다.이런 식으로 고쳤습니다.

  • 참조에서 라이브러리의 dll 제거
  • dll 파일만 다운로드하는 대신 라이브러리의 소스 코드 다운로드
  • 라이브러리의 프로젝트를 빌드하여 새 dll 파일 가져오기
  • 새 dll 파일을 기본 프로젝트의 참조에 추가합니다.

"의 응용 프로그램을 변경하여 대상 프레임워크를 변경했습니다.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>

Gtl에서 유형 UI를 찾을 수 없습니다.라는 오류가 발생합니다.Ui.Gtl" (그리고 나는 핸들러 방법이 코드 뒤에 존재한다고 확신합니다.해결 방법은 클래스 생성자에 핸들러를 추가하는 것입니다. 하지만 마이크로소프트에서는 어떤 작업이 진행되고 있습니까?

xaml.에서 네임스페이스를 호출하려고 할 때 네임스페이스에서 클래스를 사용할 수 없음을 보여주는 것과 같은 문제가 발생했습니다.많이 찾아봤어요.결국 이 문제가 VS에 있다는 것을 알게 되었습니다.VS 2013을 사용하고 있습니다.다음 단계를 시도했습니다.

  1. 빌드-->구성 관리자--> Active Solution Platform --> x64 및 x86 및 Any CPU로 변경되었습니다.
  2. VS를 닫았다가 다시 열었습니다.
  3. 바꾸다

    xmlns:VM="clr-namespace:MyFirstAppViewModel"
    

    로.

    xmlns:VM="clr-namespace:MyFirstAppViewModel;assembly=ViewModel"
    

이 오류는 일반적으로 마지막 빌드 중에 프로젝트가 성공적으로 빌드되지 않은 경우에 발생합니다.

Step-1) 먼저 XAML 또는 .cs 파일에서 모든 오류 원인 코드를 제거한 후 F5를 눌러 프로젝트를 빌드하고 시작합니다.

2단계) XAML에 오류를 유발하는 코드를 하나씩 추가합니다.

Visual Studio를 완전히 종료하고 다시 시작하면 이러한 문제가 해결되는 경우가 종종 있습니다. 이 게시물에 이미 응답한 몇 명의 사람이 언급한 것처럼 말입니다.그러나 실제로는 빌드 오류이거나 종속성 문제이기 때문에 오류가 해결되지 않을 수도 있습니다.

Visual Studio에서 WPF 프로젝트를 작업할 때 XAML 오류는 항상 근본적인 원인이 아니라 실패의 증상입니다.오류 목록 창에 표시되지 않는 .net 프레임워크 종속성 문제가 있을 수 있으며 출력 창을 사용하여 실제로 오류가 발생한 항목을 디버깅해야 합니다.

저는 실제 범인이 완전히 다른 클래스나 프로젝트에서 발생했을 때 근본적인 원인(여러 XAML 파일에 걸쳐 그렇게 많은 오류가 나타나는 이유)이 실제로는 잘못된 표시일 수 있다는 것을 배웠습니다.종종 빌드 실패를 초래합니다.특히 여러 프로젝트가 있는 솔루션에서는 한 프로젝트에서 생성하지 못하는 DLL 종속성이 존재하여 XAML 문서 오류로 표시되는 계단식 오류가 발생할 수 있습니다.

XAML의 단점 중 하나는 요소 이름이 실제 클래스와 일치하기 때문에 XAML을 확인하기 위해 라이브러리의 빌드된 복사본이 필요하다는 것입니다.따라서 라이브러리가 올바르게 빌드되지 않아 XML 오류가 발생할 수 있습니다.또한 새 컨트롤을 추가할 때 프로젝트를 빌드하지 않은 경우 새 클래스를 찾을 수 없습니다.오류를 볼 때 주의해야 할 사항일 뿐입니다.

XAML 파일 외부의 기본 빌드 문제를 수정하면 각 종속 프로젝트를 빌드할 수 있습니다.이러한 상황에서 여러 XAML 파일에 발생하는 오류는 문서 구조와는 아무런 관련이 없으며, 기본 종속성의 실패와 관련이 있습니다. 이는 필요한 속성과 바인딩을 렌더링하는 영향을 받는 XAML 문서의 기능을 손상시킬 수 있습니다.이것은 처음에는 오해의 소지가 있지만, 기본적인 문제를 이해하는 경우에 도움이 됩니다.

  • 합니다.x:Key="ViewModel" 것입니다.
  • 입하는 경우력 경우▁you ▁if▁type▁and.local:가 VS를 요?HistoryViewModel?
  • 당신의 또한당이 하세요.Class이라public

빌드 메뉴에서 코드 분석만 실행합니다.

"Run Code Analysis" 명령을 실행하면 모든 것이 재구축되고 거의 항상 문제가 해결됩니다(오른쪽 클릭 프로젝트 > Analyze > Run Code Analysis).또한 일반적으로 리소스 파일을 재구축하여 문자열 등을 찾을 수 있습니다.

이 스레드에서 모든 솔루션을 시도했지만 작동하지 않았습니다.솔루션 구성으로 인해 문제가 발생했습니다.필요한 기본 종속성 때문에 WPF 앱이 X64용으로 빌드되도록 설정되었지만 솔루션 구성은 프로젝트에 대해 여전히 AnyCPU로 설정되었습니다.솔루션 구성 관리자에서 프로젝트에 대한 새 X64 구성을 생성하면 XAML 설계자가 내 유형과 네임스페이스를 최종적으로 인식할 수 있습니다.

.xaml 파일에 이름 공간을 추가하기 전에 기존 코드로 인한 컴파일 오류가 없는지 확인하십시오.

모든 컴파일 검사가 정상적으로 완료되면 솔루션을 재구성하고 해당 클래스 또는 속성을 사용하는 데 필요한 네임스페이스를 추가하십시오.

이 특정 오류 이외의 오류가 있는 경우에도 이 문제가 발생할 수 있습니다.오류가 많을수록 파일이 제대로 컴파일되지 않고 이 오류가 발생할 수 있습니다.

먼저 다른 빌드 오류를 제거하고 가능한 경우 경고도 제거합니다.그런 다음 솔루션을 다시 빌드합니다.

이것은 저에게 반복되는 문제입니다. 번은 경고 탭에서 솔루션을 발견했습니다.그것은.NET 프레임워크 버전 문제 및 다음 사항을 명시했습니다.

경고 9 기본 참조 "myDll"이 "에 대해 작성되었기 때문에 확인할 수 없습니다.NET Framework, Version= v4.5.2" 프레임워크.현재 대상 프레임워크 "보다 높은 버전입니다.NET Framework 버전=v4.0"입니다.

개체 레이아웃의 버퍼링에 문제가 있습니다.이름을 바꾸거나 이동하는 항목은 유실됩니다.일반적으로 제게 효과가 있는 것은 완전히 새로운 클래스를 만들고 모든 오래된 코드로 복사하여 새로운 클래스에서 작동하게 한 다음 원래 클래스를 제거하는 것입니다.때때로 새 클래스 이름을 사용하여 실행한 후 원래 이름으로 이름을 다시 변경할 수 있습니다(일반적으로 그렇지 않음).

.xaml의 헤더에서 xmlns:local="using:MyRootNamespace.ChildNamespace"를 사용하고 있었는데 xmlns:local="clr-namespace:MyRootNamespace.ChildNamespace"로 변환했습니다. ... 글쎄요, 인텔리전트가 이 작업을 수행하도록 내버려두었고, 효과가 있었습니다.

문제는 x86 대상을 생성할 때 특정 프로젝트의 출력 경로가 bin\x86\Debug로 설정된다는 것입니다.익스프레션 블렌드는 이것을 전혀 좋아하지 않는 것 같습니다.bin\debug에 있는 내용에만 관심이 있는 것 같습니다.

예를 들어 x86 프로젝트의 출력 경로를 bin\debug로 변경했다면 작동할 것이라고 확신합니다.음, 어쨌든 저한테는 효과가 있어요 :)

추가하는 .dll 파일의 Target Framework는 앱의 Target Framework와 동일해야 합니다.

저도 같은 문제에 직면해 있었습니다.이 오류가 발생하지만 프로젝트를 성공적으로 구축할 수 있습니다. 불편한 점은 UI 디자인을 볼 수 없다는 것입니다(또는 코드를 정리하고 성가신 줄을 제거하고 싶을 뿐입니다).많은 게시물을 읽으세요. 여러 가지 시도가 있지만 매력적인 작품을 따라갑니다.

Visual Studio 2019에서 사용해 보았습니다.

솔루션 -> 속성 -> 구성 속성을 마우스 오른쪽 버튼으로 클릭한 다음 프로젝트 구성을 디버그에서 릴리스로 변경하거나 그 반대로 변경합니다.

그런 다음 솔루션을 재구축합니다.그것은 당신의 문제를 해결할 수 있습니다.

https://i.stack.imgur.com/2oEWs.png

https://i.stack.imgur.com/dMwNX.png

동일한 문제가 있었고, exe를 net5.0-windows 폴더 안에 보관함으로써 해결했습니다.

빌드 후 이벤트 명령줄에서 제거하지 마십시오.

"<<...> 네임스페이스 clr-message <...>" 이 오류가 지속되면, 어떤 작업을 하든 XAML 파일과 관련된 다른 오류가 솔루션에 있을 가능성이 높습니다.저의 경우 솔루션에서 다른 문제를 해결했을 때 오류가 해결되었습니다.

xaml 파일의 네임스페이스가 올바르고 솔루션 내에서 최근에 프로젝트 이름을 수정한 경우 다음과 같이 시도할 수 있습니다.

  1. 전체 용액을 세척합니다.
  2. 종속성 계층에서 가장 낮은 항목부터 가장 높은 항목까지 각 프로젝트를 하나씩 재구성합니다.따라서 프로젝트 A가 추가 종속성이 없는 프로젝트 B와 프로젝트 C에 종속된 경우 먼저 B와 C를 재구성한 후 A를 재구성합니다.
  3. 오류가 있는 프로젝트를 언로드하고 다시 로드합니다.그런 다음 오류가 지속되면 sln을 닫았다가 다시 엽니다.

언급URL : https://stackoverflow.com/questions/15051121/the-name-does-not-exist-in-the-namespace-clr-namespace

반응형