Тоже на тему WTF - задачка из реального проекта
От: vmpire Россия  
Дата: 10.05.16 13:48
Оценка: 52 (3)
Всем привет!

Читал я, читал всякие WTF, решил тоже задать задачку про одну милую особенность дотнета.
Правда, не про производительность.

Есть простенькая функция с двумя вариантами одной строки:

public string GetAsmVersion()
{
    var asm = Assembly.GetExecutingAssembly();
    AssemblyName name = asm.GetName(); // Вариант 1
    AssemblyName name = new AssemblyName(asm.FullName); // Вариант 2
    return name.Version.ToString();
}


В чём разница между вариантами 1 и 2? В каких случаях один из этих вариантов непригоден?
Re: Тоже на тему WTF - задачка из реального проекта
От: Lexey Россия  
Дата: 10.05.16 16:02
Оценка: 16 (2) +1
Здравствуйте, vmpire, Вы писали:

V>В чём разница между вариантами 1 и 2? В каких случаях один из этих вариантов непригоден?


  Оно?
http://stackoverflow.com/questions/7925141/unable-to-call-assembly-getname-from-my-silverlight-application
"Будь достоин победы" (c) 8th Wizard's rule.
Re[2]: Тоже на тему WTF - задачка из реального проекта
От: vmpire Россия  
Дата: 11.05.16 00:42
Оценка:
Здравствуйте, Lexey, Вы писали:

V>>В чём разница между вариантами 1 и 2? В каких случаях один из этих вариантов непригоден?

L>
  Оно?
http://stackoverflow.com/questions/7925141/unable-to-call-assembly-getname-from-my-silverlight-application

Хм, это другое проявление. Но я столкнулся с другим эффектом, без Silverlight.
Но это тоже ответ, так как моя проблема имела отношение именно к секьюрити, хоть и не к [SecurityCritical].
Рассказать или ещё поинтриговать?
Re: Тоже на тему WTF - задачка из реального проекта
От: Mr.Delphist  
Дата: 11.05.16 11:11
Оценка:
Здравствуйте, vmpire, Вы писали:

V>Всем привет!


V>Читал я, читал всякие WTF, решил тоже задать задачку про одну милую особенность дотнета.

V>Правда, не про производительность.

V>Есть простенькая функция с двумя вариантами одной строки:


V>
V>public string GetAsmVersion()
V>{
V>    var asm = Assembly.GetExecutingAssembly();
V>    AssemblyName name = asm.GetName(); // Вариант 1
V>    AssemblyName name = new AssemblyName(asm.FullName); // Вариант 2
V>    return name.Version.ToString();
V>}
V>


V>В чём разница между вариантами 1 и 2? В каких случаях один из этих вариантов непригоден?


У меня сначала возникло ощущение что первый вариант содержит поле Version (т.к. от реальной assembly), а второй — либо null, либо какой-то placeholder. Но после поста от Lexey тоже начал припоминать про приколы с "метод есть, но позвать его нельзя".
Re: Тоже на тему WTF - задачка из реального проекта
От: vmpire Россия  
Дата: 20.05.16 18:29
Оценка: 13 (3)
Здравствуйте, vmpire, Вы писали:

V>В чём разница между вариантами 1 и 2? В каких случаях один из этих вариантов непригоден?

Неделя прошла, так что напишу ответ, вдруг кому-то поможет.
Вариант 1 (.GetName()), в отличие от варианта 2 требует FileAccessPermission (зачем — непонятно, всё ведь уже в памяти), которого в некоторых случаях нет.
В моём случае это была сборка для использования из отчётов в MS Reporting Services.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.