Такие разные mscorlib
От: igor-booch Россия  
Дата: 17.07.13 10:05
Оценка: :))
На моем компе есть две сборки mscorlib

mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll

mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll

В этих сборках отличается реализация Environment.Is64BitProcess

в
C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll


    /// <summary>
    /// Determines whether the current process is a 64-bit process.
    /// </summary>
    /// 
    /// <returns>
    /// true if the process is 64-bit; otherwise, false.
    /// </returns>
    public static bool Is64BitProcess
    {
      get
      {
        return false;
      }
    }



В
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll

        public static bool Is64BitProcess {
            get {
                #if WIN32
                    return false; 
                #else
                    return true; 
                #endif 
            }
        }



У меня всегда используется сборка из C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll
Игрался с Configuration Manager из свойств солюшена и у меня как-то раз получилось, что заюзалась сборка C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll
Но воспроизвести не удалась.
Для декомпиляции использую Resharper.

Объясните пожалуйста при каких условиях какие сборки используются.

OS: Win 7 x64
Отвечайте на это сообщение, только если у Вас хорошее настроение и в Вашем ответе планируются только конструктивные вопросы и замечания
http://rsdn.ru/Info/rules.xml
Re: Деталь связанная с комментариями
От: igor-booch Россия  
Дата: 17.07.13 10:11
Оценка:
Как ведите xml комментарии для Is64BitProcess в C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll
отсутствуют
Но в тул типе к Is64BitProcess VS показывает комментарии из C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll
А решарпер говорит что метод Is64BitProcess из C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll (где комментариев нет)
Отвечайте на это сообщение, только если у Вас хорошее настроение и в Вашем ответе планируются только конструктивные вопросы и замечания
http://rsdn.ru/Info/rules.xml
Re: Такие разные mscorlib
От: Sinclair Россия https://github.com/evilguest/
Дата: 18.07.13 04:10
Оценка:
Здравствуйте, igor-booch, Вы писали:

IB>
IB>        public static bool Is64BitProcess {
IB>            get {
IB>                #if WIN32
IB>                    return false; 
IB>                #else
IB>                    return true; 
IB>                #endif 
IB>            }
IB>        } 
IB>


шутить изволите? Какие ещё #if в скомпилированном коде?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Такие разные mscorlib
От: -n1l-  
Дата: 18.07.13 04:20
Оценка:
Il dasm'ом посмотрите на эти методы, так ли они отличаются на в самом деле.
Re: Уточняю
От: igor-booch Россия  
Дата: 18.07.13 08:08
Оценка: :)
Согласен небрежно употребил термин декомпиляция.
Rsharper может получать исходный код двумя способами:
1) путем декомпиляции
2) путем скачивания исходников с http://referencesource.microsoft.com/netframework.aspx

Исходный код C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll Resharper получил путем декомпиляции, поэтому #if там нет.
А вот исходный код C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll декомпиляции не подвергается (пробовал Reflector'ом и dotPeek'ом) поэтому Rsharper показал исходный код с http://referencesource.microsoft.com/netframework.aspx
, а директива компиляции #if уже есть.
Вот еще вопрос почему C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll не подвергается декомпиляции?

Размеры C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll и C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll отличаются в раза: 5 173 328 байт и 2 564 528 байт соответственно. Вопрос: откуда такая большая разница в размере?
CheckAsm в независимости от целевой платформы x86 или x64 показывает что используется C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll. Её размер 5 122 128 байт. Это уже 3-я mscorlib.dll! Вопрос в силе при каких условиях какая mscorlib.dll используется и зачем их так много?.
Еще интересно почему C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll нет в GAC в отличии от остальных двух mscorlib.dll?
Отвечайте на это сообщение, только если у Вас хорошее настроение и в Вашем ответе планируются только конструктивные вопросы и замечания
http://rsdn.ru/Info/rules.xml
Re[2]: 4-я mscorlib
От: igor-booch Россия  
Дата: 18.07.13 08:29
Оценка:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll
Размер 2 650 448 байт

Версии всех Все 4-х mscorlib.dll отличаются только номером билда:

Итого

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll
Размер 2 650 448 байт
Версия 4.0.30319.1

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll
Размер 2 564 528 байт
Версия 4.0.30319.17929

C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll
Размер 5 173 328 байт
Версия 4.0.30319.18052

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll
Размер 5 122 128 байт
Версия 4.0.30319.18052
Отвечайте на это сообщение, только если у Вас хорошее настроение и в Вашем ответе планируются только конструктивные вопросы и замечания
http://rsdn.ru/Info/rules.xml
Re[2]: Такие разные mscorlib
От: igor-booch Россия  
Дата: 18.07.13 08:30
Оценка:
N>Il dasm'ом посмотрите на эти методы, так ли они отличаются на в самом деле.


C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll
.method public hidebysig specialname static 
        bool  get_Is64BitProcess() cil managed
{
  // Code size       0 (0x0)
} // end of method Environment::get_Is64BitProcess


C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll
.method public hidebysig specialname static 
        bool  get_Is64BitProcess() cil managed
{
  // Code size       0 (0x0)
} // end of method Environment::get_Is64BitProcess


C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll
.method public hidebysig specialname static 
        bool  get_Is64BitProcess() cil managed
{
  // Code size       2 (0x2)
  .maxstack  8
  IL_0000:  ldc.i4.0
  IL_0001:  ret
} // end of method Environment::get_Is64BitProcess



C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll
.method public hidebysig specialname static 
        bool  get_Is64BitProcess() cil managed
{
  // Code size       2 (0x2)
  .maxstack  8
  IL_0000:  ldc.i4.1
  IL_0001:  ret
} // end of method Environment::get_Is64BitProcess
Отвечайте на это сообщение, только если у Вас хорошее настроение и в Вашем ответе планируются только конструктивные вопросы и замечания
http://rsdn.ru/Info/rules.xml
Re: Такие разные mscorlib
От: vmpire Россия  
Дата: 18.07.13 08:33
Оценка: 10 (1)
Здравствуйте, igor-booch, Вы писали:

IB>На моем компе есть две сборки mscorlib


IB>mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

IB>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll

IB>mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

IB>C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll

IB>В этих сборках отличается реализация Environment.Is64BitProcess

В Reference Assemblies лежат не настоящие сборки, а заглушки, содержащие только метаданные. Поэтому код там написан просто "чтобы был", реально он не используется.
Подробности здесь
Re[3]: Такие разные mscorlib
От: -n1l-  
Дата: 18.07.13 08:39
Оценка:
Здравствуйте, igor-booch, Вы писали:

N>>Il dasm'ом посмотрите на эти методы, так ли они отличаются на в самом деле.



IB>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll

IB>
IB>.method public hidebysig specialname static 
IB>        bool  get_Is64BitProcess() cil managed
IB>{
IB>  // Code size       0 (0x0)
IB>} // end of method Environment::get_Is64BitProcess
IB>


IB>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll

IB>
IB>.method public hidebysig specialname static 
IB>        bool  get_Is64BitProcess() cil managed
IB>{
IB>  // Code size       0 (0x0)
IB>} // end of method Environment::get_Is64BitProcess
IB>


IB>C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll

IB>
IB>.method public hidebysig specialname static 
IB>        bool  get_Is64BitProcess() cil managed
IB>{
IB>  // Code size       2 (0x2)
IB>  .maxstack  8
IB>  IL_0000:  ldc.i4.0
IB>  IL_0001:  ret
IB>} // end of method Environment::get_Is64BitProcess
IB>



IB>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll

IB>
IB>.method public hidebysig specialname static 
IB>        bool  get_Is64BitProcess() cil managed
IB>{
IB>  // Code size       2 (0x2)
IB>  .maxstack  8
IB>  IL_0000:  ldc.i4.1
IB>  IL_0001:  ret
IB>} // end of method Environment::get_Is64BitProcess
IB>


У вас заголовки последних двух кодов одинаковые.
И, да, они отличаются. В первом говорится, что у вас не x64, во втором, наоборот.
Re[4]: Такие разные mscorlib
От: igor-booch Россия  
Дата: 18.07.13 08:44
Оценка:
N>У вас заголовки последних двух кодов одинаковые.
N>И, да, они отличаются. В первом говорится, что у вас не x64, во втором, наоборот.

Не одинаковые
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll

Или другой заголовок имелся ввиду?
Отвечайте на это сообщение, только если у Вас хорошее настроение и в Вашем ответе планируются только конструктивные вопросы и замечания
http://rsdn.ru/Info/rules.xml
Re[5]: Такие разные mscorlib
От: -n1l-  
Дата: 18.07.13 09:05
Оценка:
Нет, этот. В общем все нормально.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.