2009-10-12 3 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

Самый простой является:

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

который автоматически даст вам самую последнюю версию, сборку из GAC.

Обратите внимание, что метод устарел по уважительным причинам. Просить о неспецифической версии GAC, возможно, вызовет массу неприятностей.

Не зная, что вы хотите делать, трудно дать дополнительные советы, но в целом, если вы ищете конкретную версию, вам лучше всего пробовать ее, а не просто загружать «что-то».

+0

Чтобы уточнить: я не пытаюсь сделать что-то большее, чем вопрос, который задает вопрос, а именно: найдите последний номер версии сборки GAC, чтобы он мог быть зарегистрирован. Я проявляю осторожность, поскольку это устаревший метод. Однако я считаю, что мое приложение безопасно, потому что я не буду использовать объект Assembly, возвращаемый методом LoadWithPartialName(), для чего-либо еще. От MSDN: «Этот метод сначала вызывает Load. Если сборка не найдена, этот метод возвращает сборку из кэша глобальной сборки, имеющего то же самое простое имя, и самый высокий номер версии». Большое спасибо! – Ken

3

Используя managed wrapper вокруг Fusion API (fusion.dll), вы можете перечислить сборки в GAC, отфильтровать их по имени и заказать по версии.

+0

По общему признанию, это, вероятно, более правильный способ выполнить мою задачу. Тем не менее, устаревший метод LoadWithPartialName, как представляется, соответствует моим минимальным требованиям для большинства случаев только с одной строкой кода и без COM-взаимодействия. Большое спасибо за совет! – Ken

 Смежные вопросы

  • Нет связанных вопросов^_^