it-swarm-ko.com

오류 CS0433 "유형 'X'는 이미 A.dll과 B.dll 모두에 존재합니다"는 어디에서 발생합니까?

내부 웹 서버 (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;

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

웹 사이트가 아닌 웹 응용 프로그램에는 하나의 Default.aspx 및 하나의 Site1.Master , 의존성이 없습니다. 페이지에 asp:Label와 함께 거의 비어 있습니다. 이전에는이 ​​웹 응용 프로그램이 정상적으로 작동했습니다. Default.aspx.cs에서 마스터에 대한 참조를 제거하면 모든 것이 잘됩니다. 마스터에는 일부 코드 만 있습니다.

실제로 많은 잊고 잊어 버리는 테스트 웹 응용 프로그램 중 하나이므로 덜 신경 쓰지 않았습니다. 그러나 나는 이것을 전에 보지 못했고 지금은 코드를 새로운 프로젝트에 복사하는 것 외에는 무엇을 해야할지 궁금합니다 (청소 솔루션은 도움이되지 않습니다).

참고 : 나는 이 게시물 을 읽었으며 다른 일부는 적용되지 않습니다.

75
Abel

이론

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

이 문제는 새로운 빌드 (예 : 코드/레퍼런스/리소스 변경)를 초래하는 응용 프로그램 프로젝트를 변경 한 후에 나타납니다. 이 문제는이 새 빌드의 출력 내에있는 것으로 보입니다. 여러 가지 이유로 Visual Studio는 응용 프로그램 obj/bin 폴더의 전체 내용을 대체하지 않습니다. 이로 인해 응용 프로그램의 bin 폴더 내용 중 적어도 일부 내용이 오래되었습니다.

이 문제가 발생하면 "Temporary ASP.NET Files"폴더 만 지우면 문제가 해결되지 않습니다. 다음에 응용 프로그램에 액세스 할 때 응용 프로그램 bin 폴더의 오래된 내용이 "Temporary ASP.NET Files"폴더로 다시 복사되어 문제가 지속되므로 문제를 해결할 수 없습니다. 핵심은 기존 파일을 모두 제거하고 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 단계 : 새 버전의 빌드 파일 작성
109
2Toad

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\

  • on IIS 서버 (64 비트) 발생할 수도 있습니다. 찾다:

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

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

39
Alex Polkhovsky

App_Code에 .cs 파일을 배치하고 웹 응용 프로그램 프로젝트에서 컴파일하도록 빌드 작업을 변경 한 경우이 문제가 발생할 수 있습니다.

App_Code의 .cs 파일에 대한 빌드 조치를 Content로 작성하거나 App_Code의 이름을 다른 것으로 변경하십시오. intellisense가 내용으로 표시된 .cs 파일을 수정하지 않으므로 이름을 변경했습니다.

자세한 내용은 http://vishaljoshi.blogspot.se/2009/07/appcode-folder-doesnt-work-with-web.html

10
Lilja

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

더 자세한 정보는 다음과 같습니다.

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

9
NitroxDM

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

4
Naveen Q

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" %>
4
Jason Geiger

이 모든 제안 후에도 여전히 문제가있었습니다. 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 파일을 제공하는 데 문제가 없어야합니다.

3
tggm

참조 : https://support.Microsoft.com/en-in/help/2028526/building-an-asp-net-project-in-visual-studio-results-in-compiler-error

Visual Studio를 사용하여 ASP.NET 프로젝트를 빌드 할 때 다음과 유사한 오류 메시지가 임의로 나타날 수 있습니다.

컴파일러 오류 메시지 : CS0433 : 'C :\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\Book_Details\abc12345\def8910\App_Web_msftx123.dll 및'ASP.summary_common_controls_notes_ascx '유형이 모두 존재합니다. c :\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\Book_Details\abc12345\def8910\App_Web_msfty456.dll '

설명 :이 요청을 처리하는 데 필요한 자원을 컴파일하는 중에 오류가 발생했습니다. 다음 특정 오류 세부 사항을 검토하고 소스 코드를 적절하게 수정하십시오.

소스 오류 : 100 행 : 101 행 :
New Notes Line 102 :
103 행 :
1450 104 행 :

개요.

소스 파일 : d :\http\post\publisher\default.aspx 줄 : 102

이 오류가 발생할 수있는 일반적인 시나리오는 아래에 설명되어 있습니다.

시나리오 1

설명 : 일반적인 원인은 동일한 웹 응용 프로그램 저장소 폴더에 두 개의 클래스 정의가 포함되어 있지만 클래스 이름이 같은 두 개의 어셈블리가있는 경우입니다. 둘 이상의 Default.aspx가 단일 어셈블리로 컴파일 된 경우 발생할 수 있습니다. 일반적으로 마스터 페이지 (Default.master)와 기본 ASPX 페이지 (Default.aspx)가 모두 _Default 클래스를 선언 할 때 발생합니다. 솔루션 : 마스터 페이지의 클래스 이름을 변경하고 (대부분의 경우 _Default에서) 프로젝트를 다시 빌드하십시오. 클래스 간의 이름 충돌을 해결하는 것이 중요합니다.

시나리오 2

설명 : Visual Studio의 참조 경로는 프로젝트에서 사용하는 어셈블리 참조의 폴더 경로를 지정하는 데 사용됩니다. 경로에 동일한 클래스 이름이 포함 된 어셈블리가 포함되어있을 수 있습니다. 동일한 어셈블리에 여러 참조가 추가되어 (이름이나 이름이 다를 수 있음) 이름 충돌이 발생할 수 있습니다.
해결 방법 : 이전 버전 참조를 제거하십시오. 이렇게하려면 Visual Studio에서 웹 사이트를 마우스 오른쪽 단추로 클릭하고 속성에서 "참조"를 확인하십시오.

시나리오 3

설명 : 기본적으로 ASP.NET 웹 응용 프로그램이 컴파일 될 때 컴파일 된 코드는 Temporary ASP.NET Files 폴더에 있습니다. 기본적으로 액세스 권한은 컴파일 된 코드에 액세스하는 데 필요한 높은 신뢰 권한을 가진 ASP.NET 로컬 사용자 계정에 부여됩니다. 버전 관리 충돌을 일으키는 기본 사용 권한이 약간 변경되었을 수 있습니다. 또 다른 가능성은 안티 바이러스 소프트웨어가 실수로 어셈블리를 잠그는 것일 수 있습니다. 해결 방법 : 모든 내용의 임시 ASP.NET 파일 폴더를 지우십시오.

시나리오 4

설명 : web.config의 배치 속성이 True로 설정되면 파일에 처음 액세스 할 때 필요한 컴파일로 인한 지연이 제거됩니다. ASP.NET은 컴파일되지 않은 모든 파일을 일괄 처리 모드로 미리 컴파일하므로 파일을 처음 컴파일 할 때 지연이 발생합니다. 일괄 컴파일을 끄면 응용 프로그램에있을 수 있지만보고되지 않은 마스크 된 컴파일 오류가 발생할 수 있습니다. 그러나이 문제의 경우 ASP.NET에 개별 .aspx/.ascx 파일을 단일 어셈블리가 아닌 별도의 어셈블리로 동적으로 컴파일하도록 지시합니다. 솔루션 : web.config의 섹션에서 batch = false를 설정하십시오. 컴파일 섹션에서 batch = false를 설정하면 Visual Studio에서 응용 프로그램의 빌드 시간에 상당한 성능 영향을 미치므로 임시 솔루션으로 간주해야합니다.

시나리오 5

설명 : ASP.NET 응용 프로그램의 web.config 파일을 수정하거나 bin 폴더의 파일을 변경 (예 : 추가, 삭제 또는 이름 변경)하면 AppDomain이 다시 시작됩니다. 이 문제가 발생하면 웹 사이트가 다시 시작될 때 모든 세션 상태가 손실되고 캐시 된 항목이 캐시에서 제거됩니다. 웹 응용 프로그램의 일관성이없는 상태로 인해 문제가 발생할 수 있습니다. 솔루션 : web.config 파일을 터치 (편집)하여 AppDomain 재시작을 트리거하십시오.

시나리오 6

설명 : App_Code 폴더에 소스 코드를 저장할 수 있으며 런타임시 자동으로 컴파일됩니다. 결과 어셈블리는 웹 응용 프로그램의 다른 코드에 액세스 할 수 있습니다. 따라서 App_Code 폴더는 Bin 폴더와 매우 유사하지만 컴파일 된 코드 대신 소스 코드를 저장할 수 있다는 점이 다릅니다. 소스 파일이 변경되면 클래스가 다시 컴파일됩니다. 오래된 어셈블리로 인해 충돌이 발생하면 다시 컴파일을 수행하면 문제가 해결 될 수 있습니다. 솔루션 : Bin 또는 App_Code 폴더에서 파일을 터치하면 전체 재 컴파일이 트리거됩니다.

3

다른 이유를 찾았습니다. 도구 상자의 아이콘과 프로젝트의 참조에 사용되는 다른 버전. 어떤 형태로 객체를 삽입 한 후 오류가 시작되었습니다.

2
Rogério Silva

동일한 클래스 이름이 여러 .aspx.cs 파일, 즉 두 개의 페이지가 다른 파일 이름으로 작성되었지만 실수로 동일한 클래스 이름을 갖는 경우.

// file a.aspx
public partial class Test1: System.Web.UI.Page

// file b.aspx
public partial class Test1: System.Web.UI.Page

웹 응용 프로그램을 빌드하는 동안 경고가 표시되지만 응용 프로그램을 게시 한 후에는 응용 프로그램이 더 이상 작동하지 않고 OP의 질문에 언급 된 것처럼 예외가 발생합니다.

두 클래스 이름이 겹치지 않도록하여 문제를 해결하십시오.

2
Deepak

이것은 내 Web.Config의 오류로 인해 발생했습니다.

<add Assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add Assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add Assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add Assembly="System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add Assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

Sytem.Web.Helpers은 (는) 3.0.0.0 대신 1.0.0.0을 가리 켰습니다 (MVC 3이이 프로젝트에서 사용되고 있습니다).

IIS는 로컬 폴더에서 참조를 찾을 수 없으므로 GAC에서 찾은 두 가지 버전을 찾았습니다. 올바른 참조를 가리킨 후 IIS found 로컬 dll을 사용하여 GAC를 검색하는 대신 사용했습니다.

2
mlapaglia

"Clean Solution"다음에 "Rebuild Solution"도 문제를 해결하는 것으로 보입니다.

2
Roman

우리의 경우, 그 이유는 IIS의 사이트와 .dll 버전의 차이 때문이었습니다. IIS에서 서로 아래에 배치되어 하위 도메인을 통해 다른 하나에 액세스 할 수 있습니다. 첫 번째 web.config에서 상속하여 다음 web.config와 결합하여 다른 버전의 mvc.dll을 갖지 못했습니다.

0
Christian Haaland

적어도 나에게 이것은 어셈블리에 대한 참조를 제거하고 다른 이름을 가진 최신 버전에 대한 참조를 추가했을 때 발생했습니다. 이 경우 이전 어셈블리가 binobj 폴더에 남아 있고 Visual Studio에서 클린 솔루션 작업으로 제거되지 않은 것 같습니다 (아마 더 이상 프로젝트의 일부). 이 경우 Windows 탐색기 (또는 파일 관리 도구)에서 오류가 발생한 프로젝트의 binobj 폴더의 내용을 삭제하면 충분합니다. 그런 다음 Visual Studio에서 솔루션을 정리하고 다시 빌드하십시오.

0

동일한 클래스 이름을 가진 두 개의 ascx 컨트롤에서 동일한 문제가 발생했습니다.

Control1 : <% @ 제어 언어 = "C #"ClassName = "myClassName"AutoEventWireup = "true ...> Control2 : <% @ 제어 언어 ="C # "ClassName ="myClassName "AutoEventWireup ="true ...>

클래스 이름을 바꾸면 간단히 고쳤습니다.

Control1 : <% @ 제어 언어 = "C #"ClassName = "myClassName1"AutoEventWireup = "true ...> Control2 : <% @ 제어 언어 ="C # "ClassName ="myClassName2 "AutoEventWireup ="true ...>

0
kunalbabre

솔루션을 닫았다가 다시 연 다음 doubling up에 대한 프로젝트 참조를 확인하십시오.

enter image description here

NuGet이고 DLL 참조 위치를 변경 한 경우에 발생할 수 있습니다. 이 문제를 해결하려면 다음과 같이 항목을 제거하여 proj 파일을 수동으로 편집해야합니다.

  <Import Project="..\packages\CefSharp.WinForms.53.0.0\build\CefSharp.WinForms.targets" Condition="Exists('..\packages\CefSharp.WinForms.53.0.0\build\CefSharp.WinForms.targets')" />

이러한 "<Import"참조는 proj 파일의 다른 지점에 나타날 수 있으므로주의하십시오.

0
Jeremy Thompson

.net 4.5에서 웹 응용 프로그램으로 실행되도록 이전 asp.net (v 1 또는 2) 웹 사이트를 변환하고 있습니다.

내 솔루션은 문제를 일으킨 사용자 컨트롤 이벤트 처리기 대리자를 별도의 실제 파일로 옮기는 것입니다.

//move this line to a new physical file:
public delegate void LocationSearchedEventHandler( object sender );

public partial class controls_Drives_LocationAddPanel : UserControl
{
    public event LocationAddedEventHandler LocationAdded;
    protected virtual void OnLocationAdded(LocationAddEventArg e)
    {
0
marcel_g

여기에는 여러 가지 이유가 있습니다. 그리고 위에서 언급 한 대부분은 다른 시나리오에 적용됩니다. 내가 주목 한 것은 인증이 '없음'이 아닌 다른 것으로 설정된 경우에만 오류가 발생한다는 것입니다. 내 테스트 목적으로 이것을 설정하고 작동합니다.

0
Chagbert

CS0433에 대한 오류 URL을 클릭 할 때 첫 번째 Google 검색을 클릭 할 때 여기로 리디렉션되었습니다. 특히

The type 'Package' exists in both 'Windows... Version=N.N.N.N, Culture=neutral, PublicKeyToken=null, ContentType=Windows...' and 'Windows..., Version=255.255.255.255, Culture=neutral, PublicKeyToken=null, ContentType=Windows...'

내가 고치려고했던 모든 일을 요약하는 대신 내가 그 일을 어떻게했는지 말해 드리겠습니다. 코드 업데이트가 필요한 리포지토리에 대해 NuGet 패키지를 업데이트했습니다. 패키지는 꽤 오래되었으므로 (1 년 정도) C # 프로젝트를 위해 처음 업데이트하려고했습니다.

프로세스를 시작하고이 오류가 발생하기 전까지는 어떻게 든 SL $의 C++ 프로젝트 버전을 15063로 다운 그레이드했습니다. 또한 C # 프로젝트에 TargetPlatformMinVersionTargetPlatformVersion이 새로 10.0.17134.0로 설정되어 있음을 알았습니다.

내가 "수정"하기 위해해야 ​​할 유일한 일은 TargetPlatformMinVersion를 C # 프로젝트의 TargetPlatformMinVersion보다 높은 버전으로 변경하는 것이 었습니다. C++ 프로젝트를 두 버전으로 수정해도 동작은 변경되지 않았습니다. 왜 이것이 갑자기 작동을 멈췄는지 잘 모르겠지만 유사하게 차단 된 누군가가 비슷한 전략을 사용하여 피클에서 벗어날 수 있기를 바랍니다.

0
kayleeFrye_onDeck

페이지 마크 업에서 MasterType이 참조되는 방식을 변경했습니다.

변경했습니다 : <%@ MasterType VirtualPath="~/x/y/MyMaster.Master" %>에서 <%@ MasterType TypeName="FullyQualifiedNamespace.MyMaster" %>

자세한 내용은 here 를 참조하십시오.

이것이 누군가를 돕기를 바랍니다.

0
Chris

2Toad의 답변을 시도하는 것 외에도 Visual Studio를 닫고 .vs 폴더를 삭제해야했습니다. 그 후 모든 것이 올바르게 구축되었습니다.

우연히도, 내가 겪었던 오류는 Temp 폴더를 전혀 지정하지 않았지만 분명히 시스템 생성 된 다른 것을 참조하고있었습니다. 특정 오류를 저장하지 않았습니다. \

0
Nate

매우 빠르고 편리한 수정 방법은 클래스를 어딘가에 일시적으로 참조하여 Visual Studio의 놀라운 지능을 남용하는 것입니다.

예 :

System.Runtime.CompilerServices.ExtensionAttribute x = null;

선 위에 커서를 놓거나 가리킬 때 다음 오류를 볼 수 있습니다.

'System.Runtime.CompilerServices.ExtensionAttribute'는 'C :\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll'모두에 있습니다.

이것은 즉시 충돌을 일으키는 두 가지 원인을 알려줍니다.

System.Core.dll는 유지하려는 .dll 파일이므로 다른 파일을 삭제하십시오.

bin 디렉토리에있는 것을 찾았지만 프로젝트의 다른 곳에있을 수 있습니다.

실제로 bin 디렉토리가 TFS 변경 세트의 일부로 포함되지 않을 수 있기 때문에 변경 사항을 체크인해도 문제가 해결되지 않는 이유를 설명 할 수 있습니다. 다른 팀원.

0