Ich schrieb ein Programm, das Dateien mit csc.exe meine CS- kompiliert:Erwartetes Verhalten mit weißen Raum in der Kommandozeile
namespace myCompiler
{
public partial class Form1 : Form
{
string compilerFolder;
string outputFolder;
string projectFile;
string output = @" /out:";
public Form1()
{
InitializeComponent();
}
private void startCompile_Click(object sender, EventArgs e)
{
Compile();
}
public void findCompile_Click(object sender, EventArgs e)
{
DialogResult result1 = folderBrowserDialog1.ShowDialog();
compilerFolder = folderBrowserDialog1.SelectedPath;
MessageBox.Show(compilerFolder);
cscLabel.Text = compilerFolder;
}
private void outputCompile_Click(object sender, EventArgs e)
{
DialogResult result2 = folderBrowserDialog2.ShowDialog();
outputFolder = folderBrowserDialog2.SelectedPath;
outputLabel.Text = (outputFolder);
MessageBox.Show(outputFolder);
}
private void findProject_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
projectFile = openFileDialog1.FileName;
projectLabel.Text = (projectFile);
MessageBox.Show(projectFile);
}
}
public void Compile()
{
try
{
Process compile = new Process();
string outputExe = fileName.Text;
string compiler = compilerFolder + @"\csc.exe";
string arGs = output + outputFolder + @"\" + outputExe + " " + projectFile;
compile.StartInfo.FileName = (compiler);
compile.StartInfo.Arguments = (arGs);
compile.StartInfo.RedirectStandardOutput = true;
compile.StartInfo.UseShellExecute = false;
compile.Start();
string stdOutput = "";
while (!compile.HasExited)
{
stdOutput += compile.StandardOutput.ReadToEnd();
MessageBox.Show(stdOutput);
}
}
catch (Exception errorMsg)
{
MessageBox.Show(errorMsg.Message);
}
}
private void testButton_Click(object sender, EventArgs e)
{
MessageBox.Show(projectFile);
MessageBox.Show(compilerFolder);
}
}
}
Die Kompilierung Anweisung läuft, erzeugt aber keine Ergebnisse, nur einen schnellen Blitz eines schwarzen Konsolenbildschirm.
Im Grunde, was passiert zu sein scheint, ist, wenn alle Saiten in der Kommandozeile als Argumente für den Prozess analysiert werden, wird das CS-Projektquellverzeichnis von jedem weißen Raum dh c:\users\%username%\Documents\Visual Studio 2010\
aufgebrochen wird aufgebrochen, wie c:\users\%username%\Documents\Visual then Studio
dann 2010\Projects\Myproject\myproj.cs
und anschließend schlägt die Kompilierung.
Sie benötigen doppelte Anführungszeichen um einen Dateipfad mit Leerzeichen. –
Wenn Sie wirklich können schreiben müssen ein Bild dann poste den Link und andere Benutzer Ihre Post bearbeiten und den Link in das Bild ändern :) Sie scheinen beschrieben Ihr Problem genug zu haben, obwohl – Sayse
Programme zu kompilieren ist eine integrierte Funktion von .NET , verwenden Sie den System.CodeDom-Namespace. –