2010-08-18 2 views
2

Пользователь сообщил нам, что какое-то странное поведение в нашем приложении может быть решена после установки .NET 4:Как определить, в какую инфраструктуру загружена сборка?

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
    <supportedRuntime version="v2.0.50727" /> 
    </startup> 
</configuration> 

Я не знал, что, если вы не указали сборки он может быть загружен в более высокая, но совместимая версия.

Можно ли определить, с какой рамочной программой выполняется исполняемый файл? во время выполнения? или через какой-то внешний процесс? Я хочу подтвердить, что это так, и опыт пользователей не является результатом какой-либо другой проблемы.


Process Explorer говорит EVEMon работает под 2.0, я склонен подозревать, этот вопрос является была экологическая:

Process Explorer

+0

Кому-то нравится делиться тем, чем занимался downvote? –

+0

Я не знаю, но я дам вам +1, потому что Evemon - такой полезный инструмент. –

+0

Спасибо, Скотт, не забудьте, что EVEMon написано на C#, поэтому, если вы хотите прийти и посмотреть наш код, посмотрите, есть ли что-нибудь, что вы можете добавить, не стесняйтесь. :-p –

ответ

5

Изнутри работающего кода вашей сборки, вы можете использовать систему. Static.Version static, чтобы определить версию CLR, в которой она выполняется.

Если вы не хотите изменять код сборки, вы можете использовать Process Explorer, чтобы увидеть DLL, загруженные в процессе во время выполнения. Версия CLR можно определить из версии mscoree.dll.

+0

Process Explorer говорит 2.0, странно. –

1

Не имеет смысла, программа, предназначенная для CLR версии 2.0.50727, не будет автоматически запускаться с .NET 4.0. Требуется явная запись файла .config. Учитывая мастерство вашего клиента в файлах .config, это может быть что-то, что она на самом деле сделала, а затем обнаружила, что есть проблемы.

+0

Однако целевая сборка 2/3/3.5 может быть загружена в процесс 4.0. – Richard

1

Как Николь сказал, что Process Explorer определенно самый простой способ. Вы также можете получить эту информацию из дампа полной памяти с помощью WindDBG.

Также обратите внимание, что с 4.0 вы получаете бок о бок CLR hosting. До 4.0, если вы не владеете процессом, у вас было no way of knowing what CLR was loaded. Это может быть причиной, по которой вы изучили описанное вами поведение.

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