ASP.Net 오류 : " 'foo'형식이"temp1.dll "과"temp2.dll에 모두 있습니다 "
웹 응용 프로그램 프로젝트를 실행할 때 겉보기에 무작위로 페이지가 CS0433 오류와 함께 실패 할 수 있습니다. 유형이 여러 DLL에 존재합니다. DLL은 모두 "Temporary ASP.NET Files"디렉토리에있는 생성 된 DLL입니다.
batch = "false"속성을 web.config 파일의 "compilation"요소에 추가하십시오.
이 문제는 ASP.NET 2.0에서 응용 프로그램 참조와 응용 프로그램의 폴더 구조를 사용하여 응용 프로그램을 컴파일하는 방식으로 인해 발생합니다. 응용 프로그램의 web.config 파일에있는 요소의 배치 속성이 true로 설정되어 있으면 ASP.NET 2.0은 응용 프로그램의 각 폴더를 별도의 어셈블리로 컴파일합니다.
http://www.sellsbrothers.com/1995
http://support.microsoft.com/kb/919284
이 문제는 App_Code에 .cs 파일을 배치하고 웹 응용 프로그램 프로젝트에서 컴파일하도록 빌드 작업을 변경 한 경우 발생할 수 있습니다.
App_Code의 .cs 파일에 대한 빌드 조치를 Content로 작성하거나 App_Code의 이름을 다른 것으로 변경하십시오. intellisense가 내용으로 표시된 .cs 파일을 수정하지 않으므로 이름을 변경했습니다.
http://vishaljoshi.blogspot.se/2009/07/appcode-folder-doesnt-work-with-web.html 에서 자세한 정보
이 오류의 가능한 원인 중 하나 inherits=
는 <@page language=......inherits=>
줄 에 동일한 이름을 가진 2 개의 aspx 페이지가 있기 때문 입니다.
inherits=
이름을 변경하면 오류가 해결됩니다.
다른 사람이 내 문제를 공유하는 경우 새로 분기 된 프로젝트의 웹 사이트를 게시하려고 할 때이 오류가 발생하여 빌드가 완벽하게 작동했습니다.
게시 설정-> 프리 컴파일 구성 에서 "사전 컴파일 된 사이트를 업데이트 할 수 있도록 허용" 확인란을 제거하지 않은 것으로 나타났습니다 .
다른 데이터 포인트로서, Ben의 답변 링크에 설명 된 순환 참조의 증거 없이이 문제가 발생했습니다 . 내 웹 사이트 프로젝트를 빌드하면 이러한 오류 중 일부가 실패하고 설정이 compilation batch="false"
수정되었지만 큰 생산 웹 사이트이기 때문에 그 길을 가고 싶지 않았습니다.
이 솔루션은 S :에 매핑 된 D : \ svn 폴더의 하위 폴더에있었습니다. S :에서 솔루션을 열 때 이러한 오류가 발생했지만 D : \ svn으로 바로 가서 솔루션을 열면 오류가 없습니다.
또한 compilation batch="true"
web.config에 있음에도 불구하고 매핑 된 S에서 솔루션을 열 때 모든 .ascx 파일이 자체 어셈블리로 컴파일됩니다. 실제 위치에서 파일을 열면 .ascx 파일이 해당 폴더의 어셈블리로 컴파일됩니다 ( batch="true"
작동 방식).
이상한.
이 오류는 웹 양식의 클래스 이름과 동일한 클래스 이름을 가진 wsdl stub (code behind file .cs) 사이의 충돌로 인해 발생했습니다.
ASPX 페이지 : 대시 보드 클래스 : partiacl 클래스 대시 보드
AppCode / APIServices.cs : 공개 부분 클래스 대시 보드
웹 사이트를 게시 할 때만 오류를 재현 할 수 있었지만 빌드 및 디버그는 오류를 알리지 않았습니다.
필자의 경우 솔루션의 모든 프로젝트에서 bin 폴더에서 모든 출력 어셈블리를 삭제하면 문제가 해결되었습니다. 불행히도 나는 그것에 대한 설명이 없습니다.
제 경우에는 프로젝트의 이름을 바 꾸었으므로 dll의 이름도 바뀌 었습니다. 방금 새 dll을 복사했지만 서버에서 이전 dll을 삭제하려고 생각하지 않았을 때 곧 같은 이름의 클래스 쌍이 생겼습니다. 오래된 dll을 삭제하면 트릭이 발생합니다 (원인).
이 답변 중 어느 것도 나를 위해 효과가 없었지만 문제를 해결했습니다. VS의 게시 기능을 사용하여 웹 응용 프로그램을 배포했기 때문에 웹 게시 마법사에서 게시 하기 전에 기존 파일을 모두 삭제 하는 옵션을 선택했습니다 . 이것은 응용 프로그램의 깨끗한 사본을 강요했으며 모든 것이 잘 작동했습니다.
이 솔루션은 로컬 디버깅 복사본이 제대로 작동하지만 게시 된 시스템이 작동하지 않는 경우 도움이 될 수 있습니다. 또한 개별 dll을 추적하여 삭제하고 프로덕션 파일을 먼저 삭제하지 않아도됩니다.
필자의 경우 클래스 이름이 여전히 중복 된 Designer.cs 파일을 편집하면 문제가 해결되었습니다. 어떤 이유로, "logout"클래스의 이름을 "logout2"로 바꾸었을 때 디자이너 파일에서 자동으로 변경되지 않았으며 여전히 "logout"이었으며이 클래스 이름은 이미 프로젝트의 사전 컴파일 된 dll에 존재했습니다. 내가 작업하고 개발하는 타사 웹 앱에).
aspx 페이지의 일부를 별도의 사용자 정의 컨트롤에 넣을 때이 문제가 발생했습니다. 내 컴퓨터에서 모든 것이 잘되었고 서버에서 오류가 발생했습니다.
문제 클래스와 파일의 이름이 바뀌 었습니다.
http://support.microsoft.com/kb/919284 방법 2 : 응용 프로그램의 폴더 순서를 바꾸면 가능한 순환 참조에 대해 쓰고 있습니다
이 솔루션들 중 어느 것도 나를 위해 일하지 않았습니다. 충돌하는 DLL 둘 다 C : \ ... \ AppData \ ... \ Temporary ASP.NET Files \ ...에있었습니다.
문제는 동일한 솔루션 내에서 한 프로젝트에서 다른 프로젝트로 유형을 이동하기 전에 소스 저장소를 이전 버전으로 롤백했다는 것입니다.
msbuild로 식별 된 "Temporary ASP.NET Files"위치에서 이전 DLL에 전혀 없었던 최신 DLL을 삭제하려고했습니다. msbuild는 그냥 다시 넣습니다.
또한 여기 일부가 성공적으로 사용한 web.config 설정을 시도했지만 작동하지 않았습니다. 이 글을 쓰는 동안 실제로 동일한 솔루션 내에 두 개의 MVC 프로젝트가 있고 두 가지 모두 오류가 있음을 알고 있으므로 설정을 두 가지 모두에 추가하지 않은 것이 문제 일 수 있습니다.
소스 리포지토리를 롤 포워드하고 클리닝하고 다시 롤백하고 클리닝했습니다. 아무것도.
"Temporary ASP.NET Files"위치를 모두 삭제하려고했습니다. msbuild는 다시 다시 넣었습니다.
마지막으로 Visual Studio에서 재구성을 시도했습니다. 명령 줄 출력과 "오류"출력에 모두 동일한 msbuild "Temporary ASP.NET Files"오류가 발생했지만 충돌 유형을 가리키면 Intellisense 오류가 실제로 출력 디렉토리의 DLL에 대해 불평했습니다. 분명히 "청결"과 "재 구축"은 그들의 일을하고 있지 않았다. Intellisense가 식별 한 출력 디렉토리에서 DLL을 수동으로 삭제했으며 문제가 해결되었습니다.
tl; dr-배치 설정으로 모든 web.configs를 다루고 있는지 확인하고 추가 정보를 위해 Intellisense를 활용하십시오.
내 문제는 내 프로젝트 폴더에서 생성 된 .dll에 연결되었습니다.
다른 파일을 참조하는 경우 위에서 본 모든 것을 수행하는 대신 내 문제를 해결 한 것은 내 프로젝트의 / bin 디렉토리에 남아있는 .dll을 즉시 삭제하는 것이 었습니다.
문제는 반드시 web.config 수정은 아니지만 해결해야하는 순환 참조입니다. 원본 프로젝트 파일에서 이전 .dll을 지우었지만 참조하는 프로젝트에서는 지우지 않았다는 것을 깨달았습니다.
web.config 파일을 수정하는 것은 권장하지 않습니다. 실제 문제를 해결하는 것이 아니라 반창고 수정일뿐입니다. 문제를 해결하고 싶지는 않지만 앞으로의 두통을 피하려면 두 위치에서 .dll을 제거하십시오.
두 개의 다른 프로젝트에서 같은 이름을 가진 부분 클래스가있었습니다. 하나의 프로젝트에만 남겨서 해결했습니다.
Sometimes it may help to remove the solution and create it again. Since this use to happen when converted from VS2005 to vs2010 some references to framework 4.0 (after upgrading ) remains in the solution, even all projects are defined as 3.5.
Normally rebuilding the solution should clear these problems.
I had the same problem when I was compiling the application on a compiling server.
My controller had a simple static code, so I changed my ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="controllerName.ascx.cs" Inherits="Controls.controllerName" %>
To
<%@ Control Language="C#" AutoEventWireup="true" Src="controllerName.ascx.cs" Inherits="Controls.controllerName" %>
Also removed the partial keyword from the codebehind and added a namespace to the codebehind.
This:
using System;
using System.Web.UI;
/// <summary>
/// My controller
/// </summary>
public partial class controllerName: UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
To this:
using System;
using System.Web.UI;
namespace Controles
{
/// <summary>
/// My controller
/// </summary>
public class controllerName : UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
And that worked for me.
For me this happened when I had my PrecompiledWeb/Publish location set to the current directory which was where the site's root folder was too.
My Web Site was then seeing the publish folder as part of the project when compiling/building and then finding duplicates in that manner.
i.e. Don't put the published/precompiled version of your site in your site's code folders.
If the DLL's are showing in a temporary folder, you should try cleaning your solution.
Posting my solution:
The issue was related to the "On-Access Scan" of Mcafee Antivirus. Disabling this solved the problem. Somehow, the ASP Temporary folder was not being used properly by ASP when the antivirus was ON.
Hope this helps someone.
App_Code folder is causing the problem , put the class outside the folder (Works fine)
App_Code folder is not designed for Web Application Projects
http://vishaljoshi.blogspot.in/2009/07/appcode-folder-doesnt-work-with-web.html
Go to Add reference and search for both the dll, Both of the dll would have checked, uncheck one of the dll, as there are references to the same dll with different version ambiguity gets generated.
My solution was to replace CodePage="...." with CodeBehind="..." in the .aspx file. Somehow it was left as CodePage during a migration from previous .NET versions. This page directive creates another dll file which conflicts with the projects dll file.
None of this solutions worked for me. Compiling in "Release" mode worked, but when I switched to "Debug" I got umpteen of this error Messages.
I don't understand why, but a simple restart of Visual Studio was my solution.
I faced with the problem in compile time.
I agree with the batch="true" attributes, error is telling there exist 2 assembly
Solution 1: deleting one of them
Solution2: Configure one of them
'Programming' 카테고리의 다른 글
C #에서 Select와 ConvertAll의 차이점 (0) | 2020.08.05 |
---|---|
Firefox에서 개발 된 Javascript가 IE에서 실패하는 일반적인 이유는 무엇입니까? (0) | 2020.08.05 |
파이썬 그룹 (0) | 2020.08.05 |
테스트 목적으로 브라우저에서 CSS를 비활성화하는 방법 (0) | 2020.08.05 |
배쉬 평등 연산자 (==, -eq) (0) | 2020.08.05 |