programing

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

lovejava 2023. 5. 14. 09:58

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

웹 응용 프로그램 프로젝트를 실행할 때 겉보기에는 무작위로 보이는 경우 CS0433 오류와 함께 페이지가 실패할 수 있습니다. 유형이 여러 DLL에 있습니다.DLL은 모두 "Temporary ASP"에 있는 생성된 DLL입니다.NET Files" 디렉토리입니다.

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

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

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

더 많은 정보는 http://vishaljoshi.blogspot.se/2009/07/appcode-folder-doesnt-work-with-web.html 에서 확인할 수 있습니다.

한 한 이유는 " 의한가개가능이동한지유가이일 2진다의을름니때입문있이"로 같은 입니다.inherits=에 시대에<@page language=......inherits=>선을

inherits=.name 을 합니다.

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

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

또 다른 데이터 포인트로서, 저는 벤의 답변에 있는 링크에 설명된 순환 참조의 증거 없이 이 문제를 겪었을 뿐입니다.내 웹 사이트 프로젝트를 빌드하는 것은 이러한 오류 중 몇 가지와 함께 실패하고 설정합니다.compilation batch="false"고쳤지만, 이 사이트는 규모가 큰 제작 사이트이기 때문에 저는 그 경로로 가고 싶지 않았습니다.

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

저는 또한 그것을 알아차렸습니다, 비록 가지고 있었지만.compilation batch="true" web S:열 때 .my web.config로 됩니다.위치에서 폴더의이은 .ascx 파일이 .ascx 파일을 여는 방법입니다).batch="true"작동해야 함).

이상해요.

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

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

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\...\임시 ASP.NET 파일\...

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

저는 "Temporary ASP"에서 더 새로운 DLL(구 코드베이스에는 아예 없어야 함)을 삭제하려고 했습니다.msbuild.msbuild에서 식별한 NET Files" 위치를 다시 저장합니다.

여기 있는 몇몇 사람들이 성공적으로 사용한 web.config 설정도 시도해 보았지만 역시 작동하지 않았습니다.이 글을 쓰면서 실제로 같은 솔루션 내에 두 개의 MVC 프로젝트가 있었고 두 개 모두 오류가 있었다는 것을 알게 되었지만, 문제는 두 개 모두에 설정을 추가하지 않았다는 것입니다.

저는 소스 레포를 앞으로 굴려서 청소하고 다시 굴려서 청소했습니다.아무 것도 없어요.

저는 "임시 ASP"를 모두 삭제하려고 했습니다.NET Files" 위치. msbuild에서 다시 설치합니다.

마지막으로 Visual Studio에서 재구축을 시도했습니다.명령줄 출력과 "Errors" 출력 모두 동일한 msbuild "Temporary ASP"를 제공했지만,NET Files" 오류, 충돌된 유형 위를 맴돌 때 Intellisense 오류가 실제로 출력 디렉터리의 DLL에 대해 불만을 제기했습니다.분명히 "깨끗함"과 "재구축"은 그들의 일을 하지 않았습니다.Intellisense에서 식별된 출력 디렉토리의 DLL을 수동으로 삭제하여 문제가 해결되었습니다.

tl;dr - 배치 설정으로 모든 web.config를 포함하고 있는지 확인하고 추가 단서를 위해 IntelliSense를 활용합니다.

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

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

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

저는 당신의 web.config 파일을 수정하는 것을 추천하지 않습니다. 왜냐하면 그것은 실제 문제를 해결하는 것이 아니라 단지 반창고 수정일 뿐이기 때문입니다.문제를 해결하고 싶지 않다면 그렇게 하십시오. 그러나 나중에 발생하는 문제를 방지하려면 두 위치에서 .dll을 제거하십시오.

저는 두 개의 다른 프로젝트에서 같은 이름의 부분 수업을 했습니다.저는 그것을 한 프로젝트에 남겨서 해결했습니다.

이 모든 해결책은 저에게 효과가 없었습니다."Release" 모드에서 컴파일하는 것은 작동했지만 "Debug"로 전환했을 때 이 오류 메시지가 자주 발생했습니다.

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

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

일반적으로 솔루션을 재구축하면 이러한 문제가 해결됩니다.

컴파일 서버에서 응용 프로그램을 컴파일할 때도 같은 문제가 있었습니다.

컨트롤러에 단순한 정적 코드가 있어서 asx를 변경했습니다.

 <%@ 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)
        {
        }
    }
}

그리고 그것은 저에게 효과가 있었습니다.

사전 컴파일된 웹/게시 위치를 사이트의 루트 폴더가 있는 현재 디렉터리로 설정했을 때 이 문제가 발생했습니다.

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

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

DLL이 임시 폴더에 표시되는 경우 솔루션을 정리해야 합니다.

내 솔루션 게시:

이 문제는 McAfee Antivirus의 "온액세스 검색"과 관련이 있습니다.이 기능을 사용하지 않도록 설정하면 문제가 해결됩니다.바이러스 백신이 켜져 있을 때 ASP Temporary 폴더가 ASP에서 제대로 사용되지 않았습니다.

이것이 누군가에게 도움이 되기를 바랍니다.

App_Code 폴더가 문제의 원인입니다. 클래스를 폴더 외부에 배치합니다(정상 작동).

App_Code 폴더는 웹 응용 프로그램 프로젝트용으로 설계되지 않았습니다.

http://vishaljoshi.blogspot.in/2009/07/appcode-folder-doesnt-work-with-web.html

Add reference and search for both dll로 이동합니다. 버전이 다른 동일한 dll에 대한 참조가 생성되므로 두 dll 모두 확인하고 dll 중 하나를 선택 취소합니다.

해결책은 .aspx 파일에서 CodePage="..."를 CodeBeynd="..."로 바꾸는 것이었습니다.이전 버전에서 마이그레이션하는 동안 CodePage로 남겨졌습니다.NET 버전.이 페이지 지시문은 프로젝트 dll 파일과 충돌하는 다른 dll 파일을 만듭니다.

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

batch="true" 특성에 동의합니다. 2개의 어셈블리가 있다는 것을 알려주는 오류가 발생했습니다.

솔루션 1: 그 중 하나를 삭제

솔루션 2: 그 중 하나를 구성합니다.

비슷한 문제가 있었습니다. 제 경우에는 솔루션을 청소해도 Visual Studio의 bin 폴더가 지워지지 않습니다.문제의 원인이 되는 폴더에 이전 컴파일된 .dll이 있습니다.

솔루션:

  1. 수동으로 bin 폴더를 삭제하고 다시 컴파일
  2. 게시하는 경우 게시하기 전에 기존 파일 삭제를 선택합니다.

이렇게 하면 문제가 해결됩니다.

참조 중 하나에 대한 별칭을 정의해야 합니다.

프로젝트 파일에서.csproj다음 항목을 추가합니다.

<ItemGroup>
    <Reference Include="temp1.dll">
      <Aliases>MyAssembly</Aliases>
    </Reference>
</ItemGroup>

위의 ItemGroup을 추가한 후,MyAssembly어셈블리의 모든 네임스페이스를 포함하는 루트 네임스페이스를 나타냅니다.temp1.dll.

그러면 유형에 액세스할 수 있습니다.foo에 위치한temp1.dll다음과 같이:

using MyAssembly.foo;

언급URL : https://stackoverflow.com/questions/371426/asp-net-error-the-type-foo-exists-in-both-temp1-dll-and-temp2-dll