2013-02-19 1 views
5

Visual Studio 2008에서 참조로 프로젝트 루트에 WinScp.dll을 추가했는데 바로 노란색 아이콘이 나타납니다. 컴파일시 : 형식 또는 네임 스페이스 이름 '으로 WinSCP는'을 (를) 찾을 수 없습니다Visual Studio에서 DLL과 동일한 이름의 실행 파일을 추가했습니다.

  • (당신은 using 지시문 또는 어셈블리 참조가?)
  • 해결 된 파일은 나쁜 이미지를, 아니 메타 데이터, 또는이있다 그렇지 않으면 접근 할 수 없다. 파일 또는 어셈블리 'E : ... \ winscp.exe'또는 해당 종속성 중 하나를로드 할 수 없습니다. 모듈에 어셈블리 매니페스트가 포함될 것으로 예상됩니다.

한 시간의 좌절감 때문에 프로젝트 파일 (프로젝트 루트에도 있음)로 WinSCP.exe를 제거하면 모든 것이 잘 컴파일된다는 것을 알았습니다. 이상한 !!!!

문제는 출력 디렉토리에 WinSCP.dll과 WinSCP.exe가 모두 필요하다는 것입니다. 나는 무엇을해야합니까?

EDIT : 파일의 이름을 바꾸거나 경로를 변경하는 등의 해결 방법이 있다는 것을 알고 있습니다. 처음에는 exe의 이름을 변경했습니다. 이제는 내 코드에서 이름이 바뀐 exe를 지정하지 않아도되므로 dll (thanks @Michael)의 이름을 바꿉니다.

하지만 처음에는 왜 문제가 있습니까? WinSCP.dll과 WinSCP.exe는 서로 다른 두 파일입니다. 이것은 Visual Studio의 버그입니까, 아니면 이해할 수없는 dll/exe의 복잡한 것입니까?

+0

아마도 WinScp.dll은 .NET 어셈블리이지만 WinScp.exe는 아닌가요? – Snixtor

+0

[WinSCP .NET Assembly] (http://winscp.net/eng/docs/library) WinSCP.dll은 기본적으로 명령 줄 인수와 함께 WinSCP.exe를 사용하기위한 프로세스 만들기를 처리하는 래퍼입니다. 기본적으로 .dll은 동일한 디렉토리에서 실행 파일을 찾지 만 호출 코드에서 변경할 수 있습니다 (현재 해결 방법은 WinSCP.exe를 WinSCP_.exe로 변경하고 적절한 변경을 수행하는 것이지만 더 나은 방법이 있어야합니다). –

+0

아마 다른 곳에있는'WinSCP.exe' 파일을 저장할 수 있고 post-build 단계를 사용하여 출력 디렉토리에 그것을 복사 할 수 있습니까? –

답변

6

WinSCP.dll 및 WinSCP.exe 어셈블리 로더로,이 파일 이름 확장자에주의를 지불하지 않습니다하지 두 개의 서로 다른 파일

있습니다. 그것이 알고있는 것은 표시 이름이이고 "winscp"인 어셈블리를 찾아야한다는 것입니다. 일치하는 항목을 검색 할 때 먼저 해당 이름을 가진 EXE 파일을 시도하고 그 다음 DLL 파일을 찾습니다. Fuslogvw.exe 유틸리티로 볼 수있는 것.

"이름"부분은 일반적으로 확장을 제외한 조립, 의 파일 이름입니다 : 디스플레이 이름은 퓨전 구성 요소에 근무 마이크로 소프트 사람에 의해이 blog post에 설명되어 있습니다. 따라서 어셈블리 foo.dll의 경우 "name"부분은 "foo"입니다. 물론, "보통"이라고 말했기 때문에 "이름"부분이 확장자를 제외한 파일 이름과 동일하지 않은 경우가 있습니다. 나는 이것을 약간 논의 할 것이다.

강조가 추가되었습니다. 그래서 WinSCP.exe를 먼저 찾았습니다. 그것은 kaboom입니다. 유효한 .NET 어셈블리가 아닙니다. 간단한 해결 방법은 DLL의 이름을 바꿔 어셈블리의 표시 이름을 변경하는 것입니다.

+0

Re :"파일 이름 확장명에주의하지 않습니다 " 이름이 바뀌 었습니다. .exe 무의미한 .com, 그리고이 문제가 없었어요. 분명히 적어도 조금 (하지만 분명히 조금) 확장에주의를 기울여야합니다. –

+2

나는 명시 적으로 "EXE 파일을 시도합니다. 그 이름은 다음 DLL 파일입니다. " –