2013-05-07 2 views
3

어셈블리 버전을 올바르게 설정하고 리플렉션으로 얻는 데 문제가있었습니다. 제가 해결 방법을 찾았지만이처럼 행동하는 이유는 내가 그것을로드하고 다음 코드 버전을 읽고있다, 어셈블리 버전을 설정하고 리플렉션으로 가져 오기 - 항상 버전 1.0.0.0?

내가 클래스 라이브러리 프로젝트를 가지고 ... 여전히 궁금 :

var assembly = Assembly.LoadFrom(assemblyName); 
var version= assembly.GetName().Version; 

그리고

assembly {AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null} 
version "1.0.0.0" 

을하지만 지금은 2.0.0.0의 값으로 조립 버전과 파일 버전 필드 클래스 라이브러리 프로젝트에서 변경되었습니다 좋은 결과를 얻을. 컴파일하고 IL DASM을 실행하여 두 라이브러리를 비교했습니다.

Metastfo의 메인 창, 즉 Metainfo의 모든 곳에서 새 라이브러리의 버전이 2.0.0.0이고 이전 라이브러리의 버전이 1.0.0.0이므로 모든 것이 정확하다는 것이 기뻤습니다.

하지만 난 버전 2.0.0.0와 어셈블리를로드 한하고,이 결과 다시 내 응용 프로그램에 갔다 :

assembly {AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null} 
version "1.0.0.0" 

그래서 반사 나에게 좋은 버전 값을 반환하지 않습니다.
FileVersionInfo.GetVersionInfo(assemblyName).FileVersion; 

가 지금은 적절한 결과를 얻을 : 해결 방법은 된 FileVersionInfo 클래스를 사용하는 것입니다.

내 질문은 다음과 같습니다. 리플렉션 메커니즘을 통해 좋은 버전을 검색하려면 클래스 라이브러리 프로젝트에서 변경해야 할 다른 항목이 있습니까? 왜 IL DASM이 적절한 버전을 나타내고 반사가 아닌가? 난 항상 일리노이 DASM이 반사를 활용한다고 생각했지만 지금은 나에게 달려있다.

모든 해답을 가져 주셔서 감사합니다.

+0

ildasm은 리플렉션을 사용하지 않습니다. 저레벨 IL 파서를 사용합니다. –

답변

-1

나는 그것을 해결할 수 있었다. 문제는 Assembly 클래스의 로딩 메서드에서 발생했습니다.

Assembly.LoadFrom을 DLL의 전체 경로와 함께 인수로 사용하고있었습니다. 2.0.0.0 버전의 라이브러리를로드 할 때 Assembly.LoadFrom이 첫 번째 라이브러리를 반환하고 라이브러리 버전 1.0.0.0이 아닌 2.0.0.0의 위치를 ​​가리키는 CodeBase 속성으로 확인했습니다. .

로딩 코드를 Assembly.LoadFile로 변경했습니다. 이제 제대로 작동하고 있습니다.

var assembly = Assembly.LoadFile(assemblyName); 
관련 문제