Как определить платформу на которой запущно C# приложение?
От: _Morpheus_  
Дата: 31.01.08 12:14
Оценка:
Хочу сделать EXE файл, который можно будет запускать под Win2k/WinXP/Linux/MacOS/XBOX 360...

На каждой из платформ будут использоваться разные библиотеки для вывода графики, соответственно хочу сделать что-то вроде такого:
public enum PlatformType
{
    Windows2000,
    WindowsXP,
    Linux,
    MacOS,
    Xbox
}


public static void Main(string[] args)
{
    switch(getTargetPlatform())
    {
        case PlatformType.Windows2000:
            Framework2k.Run();
            break;
        case PlatformType.WindowsXP:
            FrameworkXP.Run();
            break;
        case PlatformType.Linux:
            FrameworkLinux.Run();
            break;
        case PlatformType.MacOS:
            FrameworkMacOS.Run();
            break;
        case PlatformType.MacOS:
            FrameworkXbox.Run();
            break;
    }
}

private static PlatformType getTargetPlatform()
{
    // Как реализовать этот метод???
}


Соответственно, дополнительный вопрос — не возникнет ли проблем из-за того что в приложении существуют классы которые не будут использоваться, ссылающиеся на несуществующие сборки?

Заранее спасибо за помощь
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re: Как определить платформу на которой запущно C# приложени
От: Alexey M.  
Дата: 31.01.08 12:40
Оценка:
Здравствуйте, _Morpheus_, Вы писали:

_M_>private static PlatformType getTargetPlatform()

_M_>{
_M_> // Как реализовать этот метод???
_M_>}
_M_>[/c#]

Есть System.Environment.OSVersion. Но мне кажется его возможностей будет недостаточно. Видимо стоит пользоваться PInvoke для определения платформы.
Re[2]: Как определить платформу на которой запущно C# прилож
От: _Morpheus_  
Дата: 31.01.08 12:49
Оценка:
Здравствуйте, Alexey M., Вы писали:

_M_>>private static PlatformType getTargetPlatform()

_M_>>{
_M_>> // Как реализовать этот метод???
_M_>>}
_M_>>[/c#]

AM>Есть System.Environment.OSVersion. Но мне кажется его возможностей будет недостаточно. Видимо стоит пользоваться PInvoke для определения платформы.


хм, а разве pinvoke будет работать на linux\mono?
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[3]: Как определить платформу на которой запущно C# прилож
От: Alexey M.  
Дата: 31.01.08 12:57
Оценка:
Здравствуйте, _Morpheus_, Вы писали:

_M_>хм, а разве pinvoke будет работать на linux\mono?


Если честно, точно не знаю, но IMHO там должны быть средства для обращения к нативным библиотекам.
Re[4]: Как определить платформу на которой запущно C# прилож
От: Alexey M.  
Дата: 31.01.08 12:59
Оценка:
Здравствуйте, Alexey M., Вы писали:

AM>Здравствуйте, _Morpheus_, Вы писали:


_M_>>хм, а разве pinvoke будет работать на linux\mono?


AM>Если честно, точно не знаю, но IMHO там должны быть средства для обращения к нативным библиотекам.


Вот что дал беглый поиск в гугл.
Re[3]: Как определить платформу на которой запущно C# прилож
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 31.01.08 13:36
Оценка:
Здравствуйте, _Morpheus_, Вы писали:

_M_>хм, а разве pinvoke будет работать на linux\mono?


Будет.
... << RSDN@Home 1.2.0 alpha rev. 725 on Windows Vista 6.0.6000.0>>
AVK Blog
Re: Как определить платформу на которой запущно C# приложени
От: Hacker_Delphi Россия  
Дата: 31.01.08 14:25
Оценка:
Здравствуйте, _Morpheus_, Вы писали:

_M_>Хочу сделать EXE файл, который можно будет запускать под Win2k/WinXP/Linux/MacOS/XBOX 360...


_M_>На каждой из платформ будут использоваться разные библиотеки для вывода графики, соответственно хочу сделать что-то вроде такого:

[злобно заскипано]
_M_>Соответственно, дополнительный вопрос — не возникнет ли проблем из-за того что в приложении существуют классы которые не будут использоваться, ссылающиеся на несуществующие сборки?
для того, чтобы проблем не возникало — опиши общие интерфейсы для всего, что связано с графикой (не будешь же ты switch ставить везде, где вывод линии делается )ну а конкретную библиотеку подгружай динамически... через Reflection.
... << RSDN@Home 1.2.0 alpha rev. 789>>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re: Как определить платформу на которой запущно C# приложени
От: _Morpheus_  
Дата: 31.01.08 14:48
Оценка:
Нашел как определить что прога запущена под Mono

    return Type.GetType ("Mono.Runtime") != null;



теперь еще бы опредилить что прога запущена под XBOX...
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[2]: Как определить платформу на которой запущно C# прилож
От: _Morpheus_  
Дата: 31.01.08 14:51
Оценка:
Здравствуйте, Hacker_Delphi, Вы писали:

_M_>>Соответственно, дополнительный вопрос — не возникнет ли проблем из-за того что в приложении существуют классы которые не будут использоваться, ссылающиеся на несуществующие сборки?

H_D>для того, чтобы проблем не возникало — опиши общие интерфейсы для всего, что связано с графикой (не будешь же ты switch ставить везде, где вывод линии делается )ну а конкретную библиотеку подгружай динамически... через Reflection.


да это уже и так давно реализовано, классы engine'а требуют только IntPtr на буффер куда нужно рисовать и параметры буфера, больше им для рисования ничего не нужно — им этого достаточно
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re: Как определить платформу на которой запущно C# приложени
От: hard.disk  
Дата: 31.01.08 15:11
Оценка:
Здравствуйте, _Morpheus_, Вы писали:

_M_>Хочу сделать EXE файл, который можно будет запускать под Win2k/WinXP/Linux/MacOS/XBOX 360...


_M_>На каждой из платформ будут использоваться разные библиотеки для вывода графики, соответственно хочу сделать что-то вроде такого:

_M_>[c#]
_M_>public enum PlatformType
_M_>{
_M_> Windows2000,
_M_> WindowsXP,
_M_> Linux,
_M_> MacOS,
_M_> Xbox
_M_>}

Environment.OSVersion.Platform
смотрел?
Re[2]: Как определить платформу на которой запущно C# прилож
От: _Morpheus_  
Дата: 31.01.08 15:16
Оценка:
Здравствуйте, hard.disk, Вы писали:


HD>Environment.OSVersion.Platform

HD>смотрел?

Member name Description
Unix The operating system is Unix.
Win32NT The operating system is Windows NT or later.
Win32S The operating system is Win32s. Win32s is a layer that runs on 16-bit versions of Windows to provide access to 32-bit applications.
Win32Windows The operating system is Windows 95 or later.
WinCE


XBOX там нету...
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[3]: Как определить платформу на которой запущно C# прилож
От: hard.disk  
Дата: 31.01.08 15:38
Оценка:
Здравствуйте, _Morpheus_, Вы писали:

_M_>XBOX там нету...


А меня есть

Members
Member name Description
Win32S The operating system is Win32s. Win32s is a layer that runs on 16-bit versions of Windows to provide access to 32-bit applications.
Win32Windows The operating system is Windows 95 or later.
Win32NT The operating system is Windows NT or later.
WinCE The operating system is Windows CE.
Unix The operating system is Unix.
Xbox The development platform is Xbox 360.


похоже добавили в новом фреймворке, только в каком не написано, предположительно в 3.5
Re[4]: Как определить платформу на которой запущно C# прилож
От: hard.disk  
Дата: 31.01.08 15:45
Оценка:
Здравствуйте, hard.disk, Вы писали:

HD>Здравствуйте, _Morpheus_, Вы писали:


_M_>>XBOX там нету...


HD>А меня есть


оказывается есть только описание в МСДНе который с VS2008 пришёл, рефлектором посмотрел у меня нет
Re[5]: Как определить платформу на которой запущно C# прилож
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 31.01.08 17:38
Оценка:
Здравствуйте, hard.disk, Вы писали:

HD>оказывается есть только описание в МСДНе который с VS2008 пришёл, рефлектором посмотрел у меня нет


SP1 надо ставить
... << RSDN@Home 1.2.0 alpha rev. 725 on Windows Vista 6.0.6000.0>>
AVK Blog
Re[2]: Как определить платформу на которой запущно C# прилож
От: SilverCloud Россия http://rodonist.wordpress.com
Дата: 06.02.08 10:15
Оценка:
Здравствуйте, _Morpheus_, Вы писали:

_M_>Нашел как определить что прога запущена под Mono

Только не забыть, что Mono и под Win бывает
Re[3]: Как определить платформу на которой запущно C# прилож
От: Аноним  
Дата: 06.02.08 11:40
Оценка:
Здравствуйте, SilverCloud, Вы писали:

SC>Здравствуйте, _Morpheus_, Вы писали:


_M_>>Нашел как определить что прога запущена под Mono

SC>Только не забыть, что Mono и под Win бывает

И наоборот — .net под Linux пока что нету
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.