2011-01-16 4 views
0

난 내가 뭔가를 EXE 파일을 생성어떻게 C#에서 exe를 오류없이 컴파일 할 수 있지만 dll이 발견되지 않으면 실행이 실패합니까?

csc /r:c\antlr\antlr.runtime.dll;c\antlr\StringTemplate.dll myprog.cs 

와 명령 줄에서 컴파일하려는 http://www.antlr.org/download/CSharp

using System; 

using Antlr.StringTemplate; 
using Antlr.StringTemplate.Language; 

참조하는 콘솔 응용 프로그램을 만들었습니다하지만 실행이 말할 때 그것은 StringTemplate 또는 종속 이유를 찾을 수 있습니까? 나는 같은 디렉토리에있는 모든 DLL 패키지를 가지고있다.

업데이트 : 동일한 프로그램이 Visual Studio 작업하에 빌드되지만 명령 줄에서이 작업을 수행해야합니다.

업데이트 2 : exe 경로로 복사해도 이상한 것을 찾을 수 없습니다!

업데이트 3 : 확인 마침내 나는 Visual Studio bin 출력과 csc 출력 디렉토리를 혼동합니다.

답변

2

이러한 세부 정보를 처리하는 친숙한 IDE를 사용하고 있지 않기 때문입니다. 이 작업을 손으로하고 있기 때문에 직접 DLL을 복사해야합니다.

csc /r:c\antlr\antlr.runtime.dll;c\antlr\StringTemplate.dll myprog.cs 
copy c:\antlr\antlr.runtime.dll . 
copy c:\antlr\stringtemplate.dll . 

DLL을가 EXE의 '프로브 경로'에있다, 그것은 어떤 문제를 발견 할 수 없습니다.

+0

그럼에도 불구하고 exe 경로에 복사되어 여전히 이상한 것을 찾을 수 없습니다! – user310291

+0

마침내 나는 콘솔 exe 대신 비주얼 스튜디오 빈에 복사했습니다! – user310291

0

여러 가지 일 수 있습니다. 나에게있어, 이와 같은 오류의 가장 일반적인 원인은 - 모든 DLL이 실제로 실행 파일 옆에 있어야한다고 가정하면 - 응용 프로그램이 모든 CPU로 컴파일되지만 실행중인 것입니다. x64 컴퓨터 (CLR이 x64로로드하므로) 참조하는 어셈블리 중 하나가 원시 코드와 상호 작용해야하거나 그렇지 않으면 x86 (32-but) 비 관리 DLL에 대한 참조를 만듭니다. 64 비트 프로세스에 32 비트 DLL을로드 할 수 없으므로 어셈블리로드가 실패합니다.

1

dll은 GAC에 있지 않는 한 exe의 같은 디렉토리에 있어야합니다.

1

DLL은 PATH 환경 변수에서 검색합니다.

특별히 지정하지 않으면;.; 경로에서 CWD가 검색되지 않습니다.

관련 문제