ASP.Net 오류 : ""temp1.dll "및"temp2.dll "모두에 'foo'유형이 ​​있습니다.


108

웹 응용 프로그램 프로젝트를 실행할 때 임의의 시간에 페이지가 CS0433 오류로 실패 할 수 있습니다. 유형이 여러 DLL에 있습니다. DLL은 모두 "Temporary ASP.NET Files"디렉토리에있는 생성 된 DLL입니다.

답변:


135

web.config 파일의 "compilation"요소에 batch = "false"특성을 추가합니다.

이 문제는 ASP.NET 2.0이 응용 프로그램 참조와 응용 프로그램의 폴더 구조를 사용하여 응용 프로그램을 컴파일하는 방식 때문에 발생합니다. 응용 프로그램의 web.config 파일에있는 요소의 배치 속성이 true로 설정된 경우 ASP.NET 2.0은 응용 프로그램의 각 폴더를 별도의 어셈블리로 컴파일합니다.

http://www.sellsbrothers.com/1995

http://support.microsoft.com/kb/919284


야, 고마워. 오늘 생산 현장에서이 문제를 해결하기 위해 애 쓰고있었습니다. 원인은 아직 모르겠지만 (너무 오랫동안 잘 작동했습니다!), 이로 인해 문제가 해결되었습니다.
Matt

감사. 작동합니다. 이 오류로 오늘 아침에 일어났습니다. 내 ISP discountasp.net이 뭔가 변경된 것 같습니다. 이 게시물이 아니었다면 여전히 오류가 있습니다. 내 ISP를 싫어합니다.
Damon

3
유용한 답변-구문은 다음과 같습니다. <compilation ... batch = "false"/>
Catto

1
"이 방법은 소규모 응용 프로그램에만 권장됩니다. 이로 인해 메모리 조각화가 발생합니다."
ThatMatthew 2014 년

22

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

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

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


11

이 오류의 한 가지 가능한 이유 inherits=<@page language=......inherits=>줄 에 동일한 이름을 가진 2 개의 aspx 페이지가 있기 때문 입니다.

inherits=이름을 변경하면 오류가 해결됩니다.


2
이것은 내 문제를 해결했으며, 코드 숨김이 필요하지 않을 때 usercontrol의 복사 / 붙여 넣기가 약간 까다로운 것 같습니다.
Grubsnik 2013-04-23

8

다른 사람이 내 문제를 공유하는 경우 새로 분기 된 프로젝트의 웹 사이트를 게시하려고 할 때이 오류가 발생했습니다. 빌드가 완벽하게 작동했습니다.

게시 설정-> 사전 컴파일 구성 아래에서 "미리 컴파일 된 사이트를 업데이트 할 수 있도록 허용" 확인란을 제거하는 것을 잊었습니다 .


4

또 다른 데이터 포인트 로서 Ben의 답변의 링크에 설명 된 순환 참조의 증거 없이 방금이 문제가 발생했습니다 . 내 웹 사이트 프로젝트를 빌드하면 이러한 오류 중 일부가 실패하고 설정이 compilation batch="false"수정되었지만 대규모 프로덕션 웹 사이트이므로 해당 경로를 가고 싶지 않았습니다.

이 솔루션은 S :에 매핑 된 D : \ svn 폴더의 하위 폴더에있었습니다. S :에서 솔루션을 열었을 때 이러한 오류가 발생했지만 D : \ svn으로 바로 이동하여 솔루션을 열면 오류가 발생하지 않습니다.

또한 compilation batch="true"web.config에 있음에도 불구하고 매핑 된 S : 드라이브에서 솔루션을 열 때 모든 .ascx 파일이 자체 어셈블리로 컴파일됩니다. 물리적 위치에서 열면 .ascx 파일이 해당 폴더의 어셈블리로 컴파일됩니다 ( batch="true"작동 방식).

이상한.


4

이 오류는 웹 양식의 클래스 이름과 동일한 클래스 이름을 가진 wsdl stub (파일 .cs 뒤에있는 코드) 간의 충돌로 인해 발생했습니다.

ASPX 페이지 : 대시 보드 클래스 : partiacl 클래스 대시 보드

AppCode / APIServices.cs : 공용 부분 클래스 대시 보드

오류는 웹 사이트를 게시 할 때만 재현 할 수 있었지만 빌드 및 디버그는 오류를 알리지 않았습니다.


2

제 경우에는 프로젝트 이름을 변경 했으므로 dll도 이름이 변경되었습니다. 방금 새 dll을 복사했지만 서버에서 이전 dll을 삭제할 생각이 없었을 때, 곧 동일한 이름을 가진 여러 쌍의 클래스가 생겼습니다. 오래된 dll을 삭제하는 것이 (원인의) 트릭을 수행했습니다.


2

이 답변 중 어느 것도 나를 위해 일하지 않았지만 문제를 해결했습니다. VS의 Publish 기능을 사용하여 웹 애플리케이션을 배포했기 때문에 게시 하기 전에 기존 파일을 모두 삭제 하는 옵션을 선택했습니다. 게시 마법사에서 게시 . 이로 인해 응용 프로그램의 깨끗한 복사본이 만들어졌고 모든 것이 잘 작동했습니다.

이 솔루션은 로컬 디버깅 복사본이 제대로 작동하지만 게시 된 시스템이 작동하지 않는 경우 유용 할 수 있습니다. 개별 dll을 추적하는 데 시간을 할애하지 않고 먼저 삭제되는 프로덕션 파일을 신경 쓰지 않는 경우에도 좋습니다.


2

필자의 경우 솔루션의 모든 프로젝트에서 bin 폴더에서 모든 출력 어셈블리를 삭제하면 문제가 해결되었습니다. 불행히도 나는 그것에 대한 설명이 없습니다.


1

제 경우에는 여전히 중복 된 클래스 이름이있는 Designer.cs 파일을 편집 할 때 문제가 해결되었습니다. 어떤 이유로 "logout"클래스의 이름을 "logout2"로 변경했을 때 디자이너 파일에서 자동으로 변경되지 않았고 여전히 "logout"이었으며이 클래스 이름은 이미 내 프로젝트의 미리 컴파일 된 dll에 존재했습니다. 함께 작업하고 개발하는 타사 웹 앱).


오류 메시지를 일으킬 수있는 새로운 방법을 마련하는 경우 :)을 추가 부담
벤 풀톤

1

aspx 페이지의 일부를 별도의 사용자 정의 컨트롤에 넣을 때이 문제가 발생했습니다. 내 컴퓨터에서는 모든 것이 정상이며 서버에서 오류가 발생했습니다.

문제 클래스 및 파일의 이름을 변경했습니다.

http://support.microsoft.com/kb/919284 방법 2 : 응용 프로그램의 폴더 재정렬이 가능한 순환 참조에 대해 작성 중입니다.


1

이 솔루션 중 어느 것도 나를 위해 일하지 않았습니다. 충돌하는 두 DLL은 모두 C : \ ... \ AppData \ ... \ Temporary ASP.NET Files \ ...

문제는 동일한 솔루션 내에서 한 프로젝트에서 다른 프로젝트로 유형을 이동하기 전에 소스 저장소를 이전 버전으로 롤백했다는 것입니다.

msbuild에서 식별 한 "임시 ASP.NET 파일"위치에서 이전 코드베이스에 전혀 없었던 최신 DLL을 삭제하려고했습니다. msbuild는 다시 넣습니다.

또한 여기 일부가 성공적으로 사용한 web.config 설정을 시도했지만 작동하지 않았습니다. 이 글을 쓰는 동안 실제로 동일한 솔루션 내에 두 개의 MVC 프로젝트가 있고 둘 다 오류가 있음을 알게 되었기 때문에 문제는 둘 다에 설정을 추가하지 않았을 수 있습니다.

내 소스 저장소를 앞으로 롤링하고 청소하고 다시 롤백하고 청소하려고 시도했습니다. 아무것도.

"임시 ASP.NET 파일"위치를 모두 삭제하려고했습니다. msbuild는 다시 넣습니다.

마지막으로 Visual Studio에서 재 구축을 시도했습니다. 명령 줄 출력과 "오류"출력 모두 동일한 msbuild "Temporary ASP.NET Files"오류를 나타내지 만 충돌 된 유형 위로 마우스를 가져 가면 Intellisense 오류가 실제로 출력 디렉터리의 DLL에 대해 불평했습니다. 분명히 "Clean"과 "Rebuild"는 그들의 일을하지 않았습니다. Intellisense가 식별 한 출력 디렉토리에서 DLL을 수동으로 삭제했고 문제가 해결되었습니다.

tl; dr-배치 설정으로 모든 web.config를 다루고 있는지 확인하고 추가 단서를 위해 Intellisense를 활용하십시오.


1

내 문제는 내 프로젝트 폴더에서 생성되는 .dll에 연결되었습니다.

위에서 본 모든 작업을 수행하는 대신 다른 파일을 참조하는 경우 내 문제를 즉시 해결 한 것은 내 프로젝트의 / bin 디렉토리에 남아 있던 .dll을 삭제하는 것입니다.

문제는 반드시 web.config 수정이 아니라 해결해야하는 순환 참조입니다. 원래 프로젝트 파일에서 이전 .dll을 지 웠지만 참조하는 프로젝트에서는 지우지 않았다는 것을 깨달았습니다.

web.config 파일을 수정하지 않는 것이 좋습니다. 이는 반창고 수정일 뿐이며 실제 문제를 실제로 해결하는 것이 아니기 때문입니다. 문제를 해결하고 싶지 않다면 그렇게하세요.하지만 앞으로의 두통을 피하려면 두 곳에서 .dll을 제거하세요.


1

두 개의 다른 프로젝트에서 같은 이름의 부분 수업이있었습니다. 나는 그것을 하나의 프로젝트에만 남겨 두어 해결했습니다.


0

때로는 솔루션을 제거하고 다시 만드는 것이 도움이 될 수 있습니다. VS2005에서 vs2010으로 변환 할 때 이러한 사용이 발생하기 때문에 프레임 워크 4.0에 대한 일부 참조 (업그레이드 후)가 솔루션에 남아 있기 때문에 모든 프로젝트도 3.5로 정의됩니다.

일반적으로 솔루션을 다시 빌드하면 이러한 문제가 해결됩니다.


0

컴파일 서버에서 응용 프로그램을 컴파일 할 때 동일한 문제가 발생했습니다.

내 컨트롤러에는 간단한 정적 코드가 있으므로 ascx를 변경했습니다.

 <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="controllerName.ascx.cs" Inherits="Controls.controllerName" %>

 <%@ Control Language="C#" AutoEventWireup="true" Src="controllerName.ascx.cs" Inherits="Controls.controllerName" %>

또한 코드 숨김에서 partial 키워드를 제거하고 코드 숨김에 네임 스페이스를 추가했습니다.

이:

using System;
using System.Web.UI;

/// <summary>
/// My controller
/// </summary>
public partial class controllerName: UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

이에:

using System;
using System.Web.UI;

namespace Controles
{
    /// <summary>
    /// My controller
    /// </summary>
    public class controllerName : UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
    }
}

그리고 그것은 나를 위해 일했습니다.


0

나에게 이것은 PrecompiledWeb / Publish 위치를 사이트의 루트 폴더가있는 현재 디렉토리로 설정했을 때 발생했습니다.

내 웹 사이트는 컴파일 / 빌드 할 때 게시 폴더를 프로젝트의 일부로보고 그런 방식으로 중복을 찾았습니다.

즉, 사이트의 코드 폴더에 사이트의 게시 / 미리 컴파일 된 버전을 넣지 마십시오.



0

내 솔루션 게시 :

이 문제는 Mcafee Antivirus의 "온 액세스 검색"과 관련이 있습니다. 이것을 비활성화하면 문제가 해결되었습니다. 어떻게 든 바이러스 백신이 켜져있을 때 ASP에서 ASP Temporary 폴더가 제대로 사용되지 않았습니다.

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


이유를 알고 계십니까? 우리 팀에도이 문제가 있으며 McAfee 때문이라고하지만 회사 IT 규칙에 따라 바이러스 백신을 비활성화 할 수 없습니다 (방해해서는 안됩니다!).
Kat Lim Ruiz

정확한 원인을 찾기 위해 여전히 노력하고 있습니다. 안타깝게도 온 액세스 검색에서 ASP Temporary 폴더를 제외해도 문제가 실질적으로 해결되지는 않습니다.
아드리안 Nasui


0

참조 추가로 이동하여 dll을 모두 검색하면 두 dll이 모두 선택되었을 것입니다. 다른 버전의 모호성을 가진 동일한 dll에 대한 참조가 있으므로 dll 중 하나의 선택을 취소하십시오.


0

내 해결책은 .aspx 파일에서 CodePage = "...."를 CodeBehind = "..."로 바꾸는 것이 었습니다. 어떻게 든 이전 .NET 버전에서 마이그레이션하는 동안 CodePage로 남았습니다. 이 페이지 지시문은 프로젝트 dll 파일과 충돌하는 또 다른 dll 파일을 생성합니다.


0

이 솔루션 중 어느 것도 나를 위해 일하지 않았습니다. "Release"모드에서 컴파일은 작동했지만 "Debug"로 전환했을 때이 오류 메시지가 많이 표시되었습니다.

이유는 모르겠지만 Visual Studio를 간단히 다시 시작하는 것이 내 해결책이었습니다.


0

나는 컴파일 시간에 문제에 직면했습니다.

나는 batch = "true" 속성에 동의 합니다. 오류는 2 개의 어셈블리가 있음 을 나타냅니다.

해결 방법 1 : 그중 하나 삭제

해결 방법 2 : 그중 하나 구성

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.