Showing posts with label windows. Show all posts
Showing posts with label windows. Show all posts

Monday, July 2, 2007

Funny ping from the future

На моём компе стандартные утилиты Windows такие как ping/tracert довольно забавно ведут себя.

Вот записал видео так сказать на память - всё-таки пинги из будущего получается:

 

Вот скриншотики чтоб лучше видно было:

 

Thursday, June 21, 2007

Storing revision information using MSBuild

После опубликования заметки про использование WSH для модификации/генерации файлов во время сборки проекта, Kostiantyn Kudriavtsev предложил альтернативный вариант - воспользоваться "тасками" MSBuild'а.

Действительно идея отличная при использовании автоматизированных сборок продуктов. В особенности с использованием MSBuild Community Tasks, в котором реализовано огромное количество "тасков" - от получения версии из SVN/VSS/TFS до модификаций файлов, создания архивов, работой с XML.

Нашел так же хороший простенький пример как раз подобной операции, что мне нужна была.

Как минус - подобный подход отличный для автоматизированных сборок - т.е. из Visual Studio при запуске проекта эти таски не будут выполняться. Слышал что возможно и в Visual Studio интегрировать, но пока хорошей информацией не могу поделится.

Tuesday, June 19, 2007

Storing revision information using Windows Script Hosting

Вот возникла задача в ASP.NET приложении отображать номер ревизии, дату когда происходил билд. Не знаю, возможно есть и более простые решения, но так, как я их не нашёл, решил написать простенький JScript код, который будет выполняться WScript'ом как prebuild-евент проекте.

Вот какой скриптик получился:

var ws = new ActiveXObject("Wscript.Shell");
var path = "";
if (WScript.Arguments.length == 1) {
path = WScript.Arguments(0);
}
var fso = new ActiveXObject("Scripting.FileSystemObject");
var oSvn = ws.Exec("svn info");
while (oSvn.Status == 0)
{
WScript.Sleep(100);
}
var vers = oSvn.StdOut.ReadAll();
var regex = new RegExp("Revision: (\\d+)","m");
var revArr = regex.exec(vers);
if (revArr==null) {
WScript.Echo("No revision found!");
} else {
rev = revArr[1];
var templateFile = fso.OpenTextFile(path+"ProductVersion.cs.template", 1);
var template = templateFile.ReadAll();
var regex2 = new RegExp("\\$Revision\\$","gm");
template = template.replace(regex2,rev);
var regex_date = new RegExp("\\$Date\\$","gm");
var date = new Date();
template = template.replace(regex_date,date.toGMTString());
var result = fso.CreateTextFile(path+"ProductVersion.cs", true);
result.Write(template);
result.Close();
}

Он фактически на основе темплейта ProductVersion.cs.template создаёт файлик ProductVersion.cs, в котором заменяються $Revision$ текущей ревизией, а $Date$ датой.


Тут разве что стоит отметить два "но":



  1. Скрипт должен запускаться в том месте, где доступна информация о ревизии (+ рядом должен лежать файлик темплейта). По этому, следует перед вызовом скрипта (через wscript/cscript) в prebuild добавить cd $(ProjectDir)
  2. Так, как проект ASP.NET 2.0 не имеет prebuild/postbuild евентов (во всяком случае я не нашёл), нужно иметь другой проект, который будет экспортить инфу о ревизии.

Кстати, почему-то подумалось: решение чем-то похоже на решение с "генераторами", про которое я недавно писал.