2009-10-12 7 views
2

GAC에 설치된 어셈블리의 최신 버전 번호를 표시하는 응용 프로그램의 진단 로그를 만들려고합니다. 예를 들어 GAC에는 foo.dll 버전 1.0.0.0과 foo.dll 버전 2.0.0.0의 두 가지 버전이 있습니다. 다음과 같은 기능이 필요합니다.GAC 어셈블리의 최신 버전 번호를 확인하는 방법

GetLatestGacVersion("foo.dll"); // returns "2.0.0.0" 

누구나 가장 좋은 방법은 알고 계십니까?

감사합니다.

+0

"진단 로그"의 데이터로 무엇을 할 것입니까? 이런 종류의 것들은 실제로 런타임에 처리해야하는 것이 아닙니다. 그리고 실제로 찾으면 퓨전 로그 뷰어 (fuslogvw)를 시도해 볼 수도 있습니다 –

+0

내 응용 프로그램에서 사용하는 GAC에 어셈블리가 있습니다. 기술 지원을 위해 로그/대화 상자 화면에 해당 어셈블리의 최신 버전 번호를 인쇄하도록 응용 프로그램을 설정하려고합니다. 더 이상 사용되지 않는 LoadWithPartialName 메소드가 이러한 최소 요구 사항을 충족시키는 것 같습니다. – Ken

답변

4

가장 쉬운입니다 : 자동으로 당신에게 GAC에서 최신 버전의 어셈블리를 줄 것이다

Assembly a = Assembly.LoadWithPartialName ("foo.dll"); 
return a.GetName().Version 

.

이 메서드는 좋은 이유로 더 이상 사용되지 않습니다. GAC에서 불특정 버전을 요구하면 많은 문제가 발생할 것입니다.

당신이하고 싶은 것을 실제로 알지 못해도 더 많은 조언을하는 것이 어렵지만 일반적으로 특정 버전을 찾고 있다면 "무언가"를로드하는 대신 그것을 조사해야합니다.

+0

명확히하기 : 질문에서 묻는 것 이상을 수행하려고 시도하지 않고있는 것입니다. GAC 어셈블리의 최신 버전 번호를 찾아서 기록 할 수 있도록하십시오. 나는 더 이상 사용하지 않는 방법으로 신중을 기하고 있습니다. 그러나 LoadWithPartialName() 메서드가 반환 한 Assembly 개체를 다른 용도로 사용하지 않기 때문에이 응용 프로그램을 안전하게 적용 할 수 있다고 생각합니다. MSDN에서 : "이 메서드는 먼저 Load를 호출합니다. 어셈블리를 찾을 수없는 경우이 메서드는 동일한 간단한 이름과 가장 높은 버전 번호를 가진 어셈블리를 전역 어셈블리 캐시에서 반환합니다." 감사합니다. – Ken

3

Fusion API (fusion.dll)을 중심으로 managed wrapper을 사용하면 GAC에서 어셈블리를 열거하고 버전별로 이름순으로 정렬 할 수 있습니다.

+0

틀림없이 이것은 아마도 내 작업을 수행하는 더 정확한 방법 일 것입니다. 그러나 사용되지 않는 LoadWithPartialName 메서드는 한 줄의 코드와 COM interop이없는 대부분의 경우 최소 요구 사항을 충족하는 것으로 보입니다. 조언 주셔서 대단히 감사합니다! – Ken

관련 문제