На моём компе стандартные утилиты Windows такие как ping/tracert довольно забавно ведут себя.
Вот записал видео так сказать на память - всё-таки пинги из будущего получается:
Вот скриншотики чтоб лучше видно было:
Development using different platforms, languages, etc: links, thoughts, experience, articles.
На моём компе стандартные утилиты Windows такие как ping/tracert довольно забавно ведут себя.
Вот записал видео так сказать на память - всё-таки пинги из будущего получается:
Вот скриншотики чтоб лучше видно было:
После опубликования заметки про использование WSH для модификации/генерации файлов во время сборки проекта, Kostiantyn Kudriavtsev предложил альтернативный вариант - воспользоваться "тасками" MSBuild'а.
Действительно идея отличная при использовании автоматизированных сборок продуктов. В особенности с использованием MSBuild Community Tasks, в котором реализовано огромное количество "тасков" - от получения версии из SVN/VSS/TFS до модификаций файлов, создания архивов, работой с XML.
Нашел так же хороший простенький пример как раз подобной операции, что мне нужна была.
Как минус - подобный подход отличный для автоматизированных сборок - т.е. из Visual Studio при запуске проекта эти таски не будут выполняться. Слышал что возможно и в Visual Studio интегрировать, но пока хорошей информацией не могу поделится.
Вот возникла задача в 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$ датой.
Тут разве что стоит отметить два "но":
Кстати, почему-то подумалось: решение чем-то похоже на решение с "генераторами", про которое я недавно писал.