2012-11-05 1 views
1

내 솔루션 중 하나가 내 프로젝트에서 발생하는 정말 이상한 오류가 발생했습니다.이 클래스 라이브러리는 TypeLoadException을 던지기 위해 참조되는 프로젝트를 유발합니다. 나는 여러 가지 해답을 살펴 보았고 내 문제와 가장 가까운 것은; 이것이 내가 내 클래스 라이브러리를 참조하고 내 프로젝트가 같은 이름의 DLL 및 EXE를 생성하는 것을 발견 디버그 폴더에 뒷조사를하고, 내 문제라면클래스 라이브러리에서 .EXE 파일을 생성하고 TypeLoadException 예외를 발생시키는 것을 어떻게 중지합니까?

TypeLoadException was unhandled in C# [closed]

이 답변은 질문을 나에게했다 이게 내 문제 일까?

이 문제를 해결하려면 어떻게해야합니까?이 솔루션에서 DLL과 EXE 파일을 생성하지 않는 다른 클래스 라이브러리도이 프로젝트에서 참조됩니다.

답변

3

나는 그것을 믿을 수는 없지만 실제로 동료를 통해 원인을 발견했습니다.이 문제가 발생하면 다른 사람들에게 도움이 될 것입니다.

내 프로젝트가 내 클래스 라이브러리를 참조하는 작업이 동일한 어셈블리 이름을 가지고 있기 때문에 필자는 내 네임 스페이스를 다시 지그재그 처리하고 내 프로젝트의 이름이 같았 음을 알지 못했기 때문에 내 코드 컴파일러는 내 기본 프로젝트에 대한 EXE를 만들고 내 클래스 라이브러리에 DLL을 사용하므로 컴파일러가 이미 동일한 이름의 EXE를로드했기 때문에 TypeLoadException이 강제로 적용됩니다.

내 코드가 작동 중입니다. 게시 할 시간을 가진 모든 사람들에게 감사드립니다.

1

프로젝트 -> (YourProjectName) 속성 -> 응용 프로그램에서 "출력 유형"이 "클래스 라이브러리"로 설정되어 있는지 확인하십시오.

+0

답장을 보내 주셔서 감사합니다. 나는 그 원인을 발견하고 [답변] (http://stackoverflow.com/a/13236893/692942)을 올렸지 만, 완성을 위해 프로젝트는 "클래스 라이브러리"로 설정되었습니다. – Lankymart

2

내 클래스 라이브러리는이 문제를 일으키는 동일한 이름

예와 DLL 및 EXE를 생성한다. Fuslogvw.exe를 실행하고 모든 바인딩을 로깅하면 쉽게 확인할 수 있습니다. 그것은 Fusion의 다소 이상한 특질이지만 어셈블리를 찾으면 파일 이름 만보고 확장자를 무시합니다. .dll과 .exe를 모두 찾고있는 어셈블리에 대해 허용되는 일치 항목으로 사용합니다. 달리 다소 논리적인데, DLL과 EXE가 관리되는 코드를 포함하고있을 때 DLL과 EXE 사이에는 진정한 차이가 없습니다. 예를 들어, EXE를 참조하는 것은 전적으로 지원됩니다.

로더가이 작업을 다르게 할 수는 없습니다. 대안은 간단해야합니다. 별개의 어셈블리 이름을 생성하십시오.

+0

그래, 내 동료와 [첨부 답변] (http://stackoverflow.com/questions/9623694/typeloadexception-was-unhandled-in-c-sharp) (어떤 이유로 그것이 닫혔습니다) 나는 이것을 해결했습니다. 어셈블리가 EXE와 DLL 모두에 대해 똑같은 이름이 붙여 졌다는 사실은 처음에 나를 던졌습니다. – Lankymart

관련 문제