[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”폴더에 복사됩니다.
해결책
- Visual Studio 닫기
- iisreset 수행
- “Temporary ASP.NET Files”폴더 내의 모든 폴더와 파일을 삭제합니다 (이 경로는 오류 메시지에서 참조 됨).
- 문제가되는 응용 프로그램의 “obj”및 “bin”폴더를 삭제합니다.
- Visual Studio를 다시 시작하고 솔루션을 엽니 다.
- “솔루션 정리”를 수행 한 다음 “솔루션 재 구축”을 수행하십시오.
설명
- 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" %>