Как определить, в какую платформу загружена сборка?
Пользователь сообщил нам, что после установки.NET 4 можно разрешить некоторые странные ситуации в нашем приложении:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v2.0.50727" />
</startup>
</configuration>
Я не знал, что если вы не укажете сборку, она может быть загружена в более ранней, но совместимой версии.
Можно ли определить, на какой платформе выполняется исполняемый файл? во время выполнения? или через какой-то внешний процесс? Я хочу подтвердить, что это так, и опыт пользователей не был результатом какой-то другой проблемы.
Process Explorer говорит, что EVEMon работает под 2.0, я склонен подозревать, что проблема была в окружающей среде:
3 ответа
Из исполняемого кода вашей сборки вы можете использовать статическое свойство System.Environment.Version, чтобы определить версию CLR, под которой она выполняется.
Если вы не хотите изменять код сборки, вы можете использовать Process Explorer, чтобы увидеть библиотеки DLL, загруженные в процесс во время выполнения. Версию CLR можно определить по версии mscoree.dll.
Не имеет смысла, программа, предназначенная для CLR версии 2.0.50727, не будет автоматически работать с.NET 4.0. Требуется явная запись в файле.config. Учитывая мастерство вашего клиента с файлами.config, это могло быть то, что она на самом деле сделала, а затем обнаружила, что возникла проблема.
Как сказала Николь, Process Explorer - определенно самый простой способ. Вы также можете получить эту информацию из дампа полной памяти, используя WindDBG.
Также обратите внимание, что с 4.0 вы получаете бок о бок CLR хостинг. До 4.0, если вы не владели процессом, у вас не было возможности узнать, какой CLR был загружен. Это может быть причиной, почему вы испытали поведение, которое вы описали.