Узнать TargetFramework для сборок под FW3.5
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 17.11.17 08:29
Оценка:
Общая задача описана здесь
Автор: Коваленко Дмитрий
Дата: 16.11.17
— хочу замутить хранилище сборок.

Хочу программно узнать под какую версию Framework откомпилирована сборка. Пишу под FW4.6.2

Эти данные хранятся в атрибуте TargetFramework.

Но этот атрибут отсутствует в сборках, откомилированных под FW3.5.

В тоже время, "JetBrain dotPeak" показывает для этих сборок сведения о платформе. И показывает правильно — ".Net Framework v3.5"

Есть предположения — как он получает эти данные?

UPD. В файлах с ресурсами (для FW4+) TargetFramework тоже отсутствует и "JetBrain dotPeak" всегда говорит, что они для ".Net Framework v4.0".
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Отредактировано 17.11.2017 10:26 DDDX . Предыдущая версия .
Re: Узнать TargetFramework для сборок под FW3.5
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 17.11.17 09:52
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Эти данные хранятся в атрибуте TargetFramework.


КД>Но этот атрибут отсутствует в сборках, откомилированных под FW3.5.


КД>В тоже время, "JetBrain dotPeak" показывает для этих сборок сведения о платформе. И показывает правильно — ".Net Framework v3.5"


КД>Есть предположения — как он получает эти данные?


Сдается мне, он это читает из PE Header. И в эти дебри я точно не полезу
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re: Узнать TargetFramework для сборок под FW3.5
От: alexzzzz  
Дата: 17.11.17 13:28
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Общая задача описана здесь
Автор: Коваленко Дмитрий
Дата: 16.11.17
— хочу замутить хранилище сборок.


КД>Хочу программно узнать под какую версию Framework откомпилирована сборка. Пишу под FW4.6.2

КД>Эти данные хранятся в атрибуте TargetFramework.
КД>Но этот атрибут отсутствует в сборках, откомилированных под FW3.5.

Ещё есть Assembly.ImageRuntimeVersion

Только он показывает версию CLR, а не версию Framework. Т.е. для Framework 2.0, 3.0, 3.5 значение может оказаться одинаковым.

КД>В тоже время, "JetBrain dotPeak" показывает для этих сборок сведения о платформе. И показывает правильно — ".Net Framework v3.5"

КД>Есть предположения — как он получает эти данные?
КД>UPD. В файлах с ресурсами (для FW4+) TargetFramework тоже отсутствует и "JetBrain dotPeak" всегда говорит, что они для ".Net Framework v4.0".

Скорее всего из ImageRuntimeVersion и берёт.
Re: Узнать TargetFramework для сборок под FW3.5
От: hardcase Пират http://nemerle.org
Дата: 17.11.17 14:56
Оценка: +2
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Но этот атрибут отсутствует в сборках, откомилированных под FW3.5.


1) Версия mscorlib должна быть 2.0.0.0
2) Должна быть ссылка на System.Core.dll

Без пункта 2) понять, что сборка была скомпилированна под FW3.5 нельзя, потому что он с т.з. API — надстройка над 2.0.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Узнать TargetFramework для сборок под FW3.5
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 17.11.17 15:15
Оценка:
Здравствуйте, hardcase, Вы писали:

КД>>Но этот атрибут отсутствует в сборках, откомилированных под FW3.5.


H>1) Версия mscorlib должна быть 2.0.0.0

H>2) Должна быть ссылка на System.Core.dll

Да, у меня потом возникла идея — посмотреть в ссылки сборки. У System.Core она как раз версия 3.5

Но потом я обнаружил, что сборки с одними ресурсами вообще какие-то анонимные (можно только версию Runtime определить) и решил забить

В целом, у меня версия FW включена прямо в название сборки, поэтому все это для меня не сильно критично.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.