PDA

Просмотр полной версии : Код С# в bat-файле


Unknown
07.11.2010, 18:15
Маленькая забавность о том, как использовать все возможности dotNet в обычных bat-скриптах. Или сделать скриптовый язык из С#.

Далее рассказан простой способ скомпилировать и запустить код С#, который находится внутри bat-файла.

Не буду долго томить:


/*
@echo off && cls
set WinDirNet=%WinDir%\Microsoft.NET\Framework
IF EXIST "%WinDirNet%\v2.0.50727\csc.exe" set csc="%WinDirNet%\v2.0.50727\csc.exe"
IF EXIST "%WinDirNet%\v3.5\csc.exe" set csc="%WinDirNet%\v3.5\csc.exe"
IF EXIST "%WinDirNet%\v4.0.30319\csc.exe" set csc="%WinDirNet%\v4.0.30319\csc.exe"
%csc% /nologo /out:"%~0.exe" %0
"%~0.exe"
del "%~0.exe"
exit
*/
class HelloWorld
{
static void Main()
{
System.Console.WriteLine("Hello, World!\r\nI am at " + System.Environment.Version);
System.Console.ReadLine();
}
}


Разберем, как это получается.

Сначала работает bat-интерпретатор. Первую строчку скрипта он не понимает и выдает ошибку. Но не страшно, это чисто визуальное неудобство. Подчистим за ним во второй строчке.

Далее пытаемся найти каталог с компилятором csc.exe и запускаем его.

Компилятор .Net Framework'a, csc в качестве аргумента принимает путь к файлу с исходником. В нашем случае исходник находится в теле bat-файла(строки 13–20). Текст bat-команд игнорируется, как комментарий(строки 1 и 11).

После работы компилятора, получаем исполняемый файл, который запускаем и удаляем после завершения его работы.

Работа bat-интерпретатора заканчивается на 10 строке (exit).

Этот подход работает на Vista/7 «из коробки» и на ХР, с установленным .Net Framework.

Целесообразность, конечно, сомнительная. Так, just for fun.

http://habrahabr.ru/blogs/net/107659/#habracut​

От себя:

Проверил на себе, идея хорошая. Уже есть пара мыслей как это хитро применить. Работают все немспейсы, можно указывать через using. И да, работают даже винформсы!

j-prof
07.11.2010, 18:26
ааааааааааааааааааааааааа ааааа люблю тя ты мой герой ппц круто

я фигею ааааааааааааааааааааааааа ааааааааааааааааааааааааа

N@b$ter
07.11.2010, 18:30
прикольная тема, очень познавательно. Можут очень помочь

Дикс
07.11.2010, 18:30
выполнение питона в браузере (http://www.fatabbat.ru/?p=1105)

j-prof
07.11.2010, 18:31
выполнение питона в браузере (http://www.fatabbat.ru/?p=1105)


ну эт не интересно

Unknown
07.11.2010, 20:20
ааааааааааааааааааааааааа ааааа люблю тя ты мой герой ппц круто
я фигею ааааааааааааааааааааааааа ааааааааааааааааааааааааа


Да это не этот сделал, а умный с хабры. А этот просто скопировал.

j-prof
07.11.2010, 23:51
Да это не этот сделал, а умный с хабры. А этот просто скопировал.


и за это спасибо я б без него не узнал про это

я на ачате сижу а не на "хабре"

aka_zver
08.11.2010, 01:06
шутники бля =\

DeepBlue7
08.11.2010, 03:10
шутники бля =\


Очень информационно насыщенный пост.

А по теме, есть пару вариантов заюзать Спасибо.

bad_boy
09.11.2010, 01:32
Да это не этот сделал, а умный с хабры. А этот просто скопировал.


Это, вообще, давно известно было и до "умного" с хабры. Для C# довольно бесполезная вещь.