I See Sharp Ответов: 3

Как выполнить командную строку visual studio 2008 в коде C#?


I need to start Visual Studio 2008 Command Prompt and publish a web site (to a target path on my local drive). 

Bellow is the code I tried (which doesn't do anything):

I need to implement something like: 
msbuild /target:Build /p:BuildingProject=true;OutDir=C:\Temp\build\ ccosapp.sln


Что я уже пробовал:

ProcessStartInfo oInfo = new ProcessStartInfo(@"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat", @"msbuild C:\Users\Johan\Documents\Visual Studio 2008\Projects\PRJAPP\PRJAPP.sln");
oInfo.UseShellExecute = false;
oInfo.ErrorDialog = false;
oInfo.CreateNoWindow = true;
oInfo.RedirectStandardOutput = true;
try
{
    System.Diagnostics.Process p = System.Diagnostics.Process.Start(oInfo);
    System.IO.StreamReader oReader2 = p.StandardOutput;
    string sRes = oReader2.ReadToEnd();
    oReader2.Close();   
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
} 

3 Ответов

Рейтинг:
5

I See Sharp

Я пришел с этим обходным путем:

1. Я создаю .bat-файл.
2. Я пишу в нем команд.
3. Наконец, я запускаю файл. bat как процесс.

StreamWriter w = new StreamWriter(@"C:\temp\publish.bat");
w.WriteLine(@"call ""C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat""");
w.WriteLine(@"call cd ""C:\Users\Johan\Documents\Visual Studio 2008\Projects\CCOSApp""");
w.WriteLine(@"call msbuild /target:Build /p:BuildingProject=true;OutDir=C:\Temp\build");
w.WriteLine("call ccosapp.sln");
w.Close();
 
System.Diagnostics.Process proc = new System.Diagnostics.Process();
ProcessStartInfo psi = new ProcessStartInfo(@"publish.bat");
psi.WorkingDirectory = @"C:\temp\";
proc.StartInfo = psi;
proc.Start();


Richard MacCutchan

Именно это я и сказал тебе вчера.

I See Sharp

Да, это здорово.

Рейтинг:
28

Sergey Alexandrovich Kryukov

В этом нет никакого смысла. В общем, CMD.exe бесполезен для программного использования. Это не что иное, как еще одно приложение, интерпретатор команд. Зачем "открывать" его? Вам нужны приложения или команды, которые вы можете запускать/запускать с помощью CMD.exe, то запускайте их, а не CMD.exe.

Вам, безусловно, нужен способ построения решений. Но для этого Вам не нужно запускать Visual Studio. Это очень важно для создания решений и проектов в один клик, без Visual Studio. Я объяснил, как это сделать, в своем недавнем ответе: MSBuild.EXE. Для получения более подробной информации, пожалуйста, смотрите мой недавний ответ: Как я компилирую... с помощью cmd?.

См. Также эти ответы:
Как автоматизировать процесс сборки с помощью MSBuild в C# .net,
Есть ли какое-либо событие, которое может быть запущено во время процесса сборки.

—СА


I See Sharp

Я пытаюсь опубликовать веб-сайт, мне нужно определить целевой путь для этих файлов. Но я не знаю, как это сделать программно. Все идет хорошо, кроме публикации. Потому что цель это единственное чего не хватает в моем коде ниже:

Type type = тип.GetTypeFromProgID ("VisualStudio.DTE. 9. 0", true);
DTE DTE = (DTE)система.Активатор.CreateInstance(тип, true);
Фильтр сообщений.Зарегистрировать();
терминальное оборудование.Главное окно.Видимое = истинное;

VsWebSite.VSWebPackage webPkg = dte.GetObject ("WebPackage") как VsWebSite.VSWebPackage;
webPkg.OpenWebSite(путь, VsWebSite.OpenWebsiteOptions.OpenWebsiteOption_None, правда);
Solutions build 2 slnbld2 = (Solutions Build 2)webPkg.DTE.Solution.SolutionBuild;


slnbld2.Чистый(правда);
slnbld2.Построить(правда);
slnbld2.Опубликовать(правда);

И я читал, что вы можете сгенерировать файлы, необходимые (для публикации веб-сайта), запустив командную строку Visual Studio 2008 с соответствующими аргументами. Но даже это не идет хорошо.

Sergey Alexandrovich Kryukov

Ваш первоначальный вопрос был о сборке. Разве я не ответил? Публикация веб-сайта может быть такой же простой, как FTP-копия.
—СА

Sergey Alexandrovich Kryukov

Тогда начинай. Командная строка-это интерактивное приложение.
Хотя я не знаю почему.
Разве вам не нужен пакет в один клик для сборки и развертывания сразу? Если да, то сделайте именно это, без всяких "подсказок".
—СА

Sergey Alexandrovich Kryukov

Что делать? Интерактивный сеанс командной строки? Просто начать? использование системы.Диагностика.Процесс.Начать.
Что-нибудь еще? Извините, я не уверен, что вы действительно понимаете, чего вам нужно достичь. Если я что-то упустил, пожалуйста, объясните.
—СА

Рейтинг:
18

Richard MacCutchan

Вы не можете использовать две команды в ProcessStartInfo конструктор. Вам нужно будет создать файл сценария, который включает в себя обе команды, а затем запустить этот файл сценария с помощью cmd.exe.


Richard MacCutchan

Команда для запуска скрипта, то есть "cmd.exe" - это команда, а имя скрипта-поле аргумента. Имейте в виду, что было бы гораздо быстрее просто построить в Visual Studio.