В этих сборках отличается реализация 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
Как ведите 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
Исходный код 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
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
.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
Здравствуйте, 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 лежат не настоящие сборки, а заглушки, содержащие только метаданные. Поэтому код там написан просто "чтобы был", реально он не используется.
Подробности здесь
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