2009-07-27 5 views
1

저는 C# .Net (vs2005) 라이브러리를 유지 관리 중이며 동료가 개발 한 fooLib이라고합시다. 이제 경영진은 barLib에 이름을 바꿔야한다고 결정했습니다..NET 라이브러리 이름 바꾸기

그래서 메타 데이터 (저작권 정보 등)를 변경하고, gac에 등록하고, 참조를 제거하고, 그것을 사용하는 각 프로젝트에서 다시 추가했습니다.

지금까지 그렇게 좋았지 만, 그것을 사용하는 프로젝트가 있는데, 디버그 버전을 링크 할 때 이상한 오류가 발생하고 릴리스는 매력처럼 작동하지만 경고는 표시되지 않습니다. 그것은 fooLib.dll을 (barLib.dll을 검색해야 할 때) 발견 할 수 없다는 것을 나에게 말해주는 길게 긴 오류 메시지를 주었고, 연결 로그가 비활성화되었고, 그것을 활성화하는 방법을 알려 주었다. 그렇게 했었지만 반환 된 유일한 새로운 정보는 잘못된 파일을 검색하는 경로 목록입니다. 솔루션을 처음부터 다시 만들 필요없이 어떻게 해결할 수 있습니까?

+1

이름이 바뀐 라이브러리에 대한 참조를 제거하고 새로 추가하려고 했습니까? – maciejkow

+0

물론. 어쨌든 고마워. – raven

답변

2

프로젝트 파일을 살펴보십시오. 다른 구성에 이상이 없는지 확인하십시오.

"ultra-clean"에서 솔루션을 빌드하십시오. 수동으로 모든 bin/obj 디렉토리를 제거하십시오.

디버그 버전을 "연결"하는 데 문제가 있다고 말하면 컴파일 타임이 아닌 실행시 오류가 발생한다는 의미입니까?

+0

아니요, 컴파일되지 않습니다. 스페인어 오류 메시지가 있습니다. 번역 할 생각입니다. 오류 어셈블리 [project.dll] 자체를 형식 라이브러리로 변환 할 수 없습니다. 타입 라이브러리 익스포터가 [project.class]를 처리 할 때 오류를 감지했습니다. 오류 : 타입 라이브러리 익스포터가 [project.class] 타입을로드 할 수 없습니다 (오류 : FileNotFoundException : 파일 또는 어셈블리를로드 할 수 없습니다 'fooLib, ...'또는 그 시스템은 지정된 파일을 찾지 못했습니다. 그러면 링커 로깅에 대해 뭔가 설명했습니다. 이제 COM Interop과 관련이 있어야합니다. – raven

+0

BTW, project.class (간결성을 위해 생략 한 이름)입니다. fooLib 클래스에서 상속받은 클래스 – raven

+0

아, 그게 COM API라는 것을 깨닫지 못했습니다. 아마도 변경 될 것입니다. 파생 클래스를 다시 작성한 적이 있습니까? –

0

'모든 CPU'에서 'x86'또는 'x64'로 빌드 대상을 변경하면 작동하는 것 같습니다. Release Build (x86으로 설정된)를 'Any CPU'로 변경하면 동일한 오류가 발생하여 오류가 발생합니다.

그러나 라이브러리 이름 변경 전이었던 것처럼 작동합니다. 꽤 무섭다 ...

편집 : 이제 정말 재밌어지고 있습니다. COM interop에 대한 레지스터가 선택되지 않은 상태에서 프로젝트 구성을 "Release | Any CPU"로 설정하면 잘 컴파일됩니다. 그런 다음 디버그, COM 확인란을 표시 할 수 있으며 여전히 잘 작동합니다. 그런 다음 interop 옵션을 검사하여 릴리스로 돌아 오면 실패합니다. 나는 디버그로 돌아가고 실패한다.