[c#] 오류 CS0433 “A.dll과 B.dll에 이미 ‘X’유형이 있습니다.”라는 오류는 어디에서 발생합니까?

IIS가 아닌 내부 웹 서버를 사용하여 Visual Studio 2008 SP1에서 웹앱을 실행하면 위에서 언급 한 오류가 발생합니다.

전체 오류 (소스 파일 Default.aspx.cs ) :

컴파일러 오류 메시지 : CS0433 : ‘WebApplication3.Site1’유형은 ‘c : \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ root \ aa563bcf \ 59deedc0 \ App_Web_site1.master.cdcab7d2에 모두 있습니다. muczzy9v.dll ‘및’c : \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ root \ aa563bcf \ 59deedc0 \ assembly \ dl3 \ 44c3a3cf \ 80dd34ed_6968ca01 \ WebApplication3.DLL ‘

이전 전체 경고 :

경고 : CS0436 : ‘c : \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ root \ aa563bcf \ 59deedc0 \ App_Web_default.aspx.cdcab7d2._tlkwdos.0의’WebApplication3._Default ‘유형입니다. cs ‘가’c : \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ root \ aa563bcf \ 59deedc0 \ assembly \ dl3 \ 44c3a3cf \ e096e61c_6568ca01 \ WebApplication3에서 가져온 유형 ‘WebApplication3._Default’와 충돌합니다. .DLL ‘입니다. ‘c : \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ root \ aa563bcf \ 59deedc0 \ App_Web_default.aspx.cdcab7d2._tlkwdos.0.cs’에 정의 된 형식을 사용합니다.

경고 소스는 중간 파일 App_Web_default.aspx.cdcab7d2._tlkwdos.0.cs를 가리 킵니다 .

Line 162:
Line 163:    [System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()]
Line 164:    public class default_aspx : global::WebApplication3._Default, System.Web.IHttpHandler {
Line 165:
Line 166:        private static bool @__initialized;

그리고 내 질문 : 이것이 어디에서 왔습니까?

webapp (웹 사이트가 아님!)에는 Default.aspx 하나와 Site1.Master 하나가 있으며 종속성이 없습니다. asp:Label페이지에있는 거의 비어 있습니다. 이전에는이 ​​웹앱이 제대로 작동했습니다. Default.aspx.cs에서 마스터에 대한 참조를 제거하면 모든 것이 잘됩니다. 마스터에는 일부 코드 만 있습니다.

실제로 많은 소규모 테스트 웹앱 중 하나이므로 덜 신경 쓰지 않았습니다. 그러나 나는 이것을 전에 본 적이 없었고 지금은 코드를 새 프로젝트에 복사하는 것 외에는 무엇을 해야할지 궁금합니다 (청소 솔루션은 도움이되지 않습니다).

참고 : 이 게시물 과 다른 게시물을 읽었 지만 적용되지 않습니다.



답변

이론

이 문제가 응용 프로그램의 버그로 인한 것이 아닌 경우 (예 : 중복 클래스 이름) :

이 문제는 새 빌드 (예 : 코드 / 참조 / 리소스 변경)로 이어지는 응용 프로그램의 프로젝트를 변경 한 후에 나타나는 것으로 보입니다. 이 문제는이 새 빌드의 출력에있는 것으로 보입니다. 다양한 이유로 Visual Studio가 애플리케이션의 obj / bin 폴더의 전체 콘텐츠를 대체하지 않습니다 . 이로 인해 응용 프로그램의 bin 폴더 내용 중 적어도 일부가 오래된 것입니다.

이 문제가 발생하면 “Temporary ASP.NET Files”폴더를 지우는 것만으로는 문제가 해결되지 않습니다. 응용 프로그램의 bin 폴더에있는 오래된 내용이 다음에 응용 프로그램에 액세스 할 때 “임시 ASP.NET 파일”폴더로 다시 복사되어 문제가 지속되기 때문에 문제를 해결할 수 없습니다. 핵심은 기존 파일을 모두 제거하고 Visual Studio가 모든 개체를 다시 작성하도록하는 것입니다. 따라서 다음에 응용 프로그램에 액세스 할 때 새 bin 파일이 “Temporary ASP.NET Files”폴더에 복사됩니다.

해결책

  1. Visual Studio 닫기
  2. iisreset 수행
  3. “Temporary ASP.NET Files”폴더 내의 모든 폴더와 파일을 삭제합니다 (이 경로는 오류 메시지에서 참조 됨).
  4. 문제가되는 응용 프로그램의 “obj”및 “bin”폴더를 삭제합니다.
  5. Visual Studio를 다시 시작하고 솔루션을 엽니 다.
  6. “솔루션 정리”를 수행 한 다음 “솔루션 재 구축”을 수행하십시오.

설명

  • 1-2 단계 : 삭제해야하는 폴더 / 파일에서 리소스 잠금을 제거합니다.
  • 3-4 단계 : 모든 이전 빌드 파일 제거
  • 5-6 단계 : 빌드 파일의 새 버전 만들기


답변

w3svc를 종료하고 모든 항목을 삭제하십시오. c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\

추가

  • Windows 7에서

    c:\Users\{username}\AppData\Local\Temp\Temporary ASP.NET Files\root\

  • IIS 서버 (64 비트) 이 발생할 수있다. 찾다:

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root

    (서버에서 최신 버전 인 경우 사용중인 프레임 워크 버전으로 v4.0.30319 대체)


답변

이는 App_Code에 .cs 파일을 배치하고 웹 애플리케이션 프로젝트에서 컴파일하도록 빌드 조치를 변경 한 경우에 발생할 수 있습니다.

App_Code의 .cs 파일에 대한 빌드 작업이 Content로 있거나 App_Code의 이름을 다른 것으로 변경합니다. intellisense가 콘텐츠로 표시된 .cs 파일을 수정하지 않기 때문에 이름을 변경했습니다.

http://vishaljoshi.blogspot.se/2009/07/appcode-folder-doesnt-work-with-web.html 에서 자세한 정보


답변

모든 aspx 페이지와 마스터 페이지의 Inherits 태그를 살펴보십시오. 같은 이름을 가진 두 개의 부분 클래스가있을 가능성이 있습니다. 하나를 변경하고 다시 컴파일하십시오.

추가 정보는 다음과 같습니다.

http://blogs.msdn.com/b/carloc/archive/2007/06/12/compiler-error-message-cs0433-in-asp-net-2-0.aspx


답변

이 모든 제안 후에도 여전히 문제가 발생했습니다. App_Code 내부의 일부 클래스가 두 개의 DLL로 컴파일되었습니다. 다음과 같은 것 (간체) :

warning CS0436: The type 'HcmDbGeographyModelBinder' in

'<user_profile_dir>\AppData\Local\Temp\Temporary ASP.NET Files\temp\3b1ed8ee\11405e8e\App_Code.oqr0kusq.0.cs'

conflicts with the imported type 'HcmDbGeographyModelBinder' in

'<user_profile_dir>\AppData\Local\Temp\Temporary ASP.NET Files\temp\3b1ed8ee\11405e8e\assembly\dl3\ea0aa3ee\6022e6d5_2cc8cf01\HCM.Web.Backoffice.DLL'.

방금 “App_Code”폴더의 이름을 “Code”로 변경했습니다. 이것은 MVC5 프로젝트이므로 웹 프로젝트의 루트 내에서 .cs 파일을 제공하는 데 문제가 없어야합니다.


답변

App_Code폴더 에서 클래스 파일을 제거하고 웹 사이트 바로 아래에 배치하면이 문제가 해결되었습니다.


답변

ASPX 파일에 중복 TagPrefix가있는 경우에도 발생할 수 있습니다.

이로 인해이 오류가 발생합니다.

<%@ Register Src="Control1.ascx" TagName="Control1" TagPrefix="uc1" %>

<%@ Register Src="Control2.ascx" TagName="Control2" TagPrefix="uc1" %>

두 번째 “uc1″을 “uc2″로 변경하여이 문제를 해결할 수 있습니다.

결정된…

<%@ Register Src="Control1.ascx" TagName="Control1" TagPrefix="uc1" %>

<%@ Register Src="Control2.ascx" TagName="Control2" TagPrefix="uc2" %>