Проблема:
Мне нужно использовать FxCopCmd.exe (FxCop 10.0) из моего кода, и моя проблема в том, что FxCopCmd получает мои аргументы (см. Ниже p.StartInfo.Arguments) с некоторой проблемой кодирования, я считаю. (У меня нет опыта кодирования или локализации.)
Пример:
Аргументы, которые я строю:
/ o: "C: \ Users \ Ákos \ Documents \ Tanulás \ diplomamunka \ softwareprojectqualityanalyser \ Implementasi \ \ Analyizer \ Analizer \ bin \ Debug \ temp \ probaAnalisisReport.xml" / fo / f: "C: \ Users \ Ákos \ Documents \ Visual Studio 2010 \ Проекты \ TeaBoiler \ TeaBoiler \ bin \ Release \ TeaBoiler.exe "
Сообщение об ошибке FxCopCmd:
Не удалось открыть выходной файл: не удалось найти часть пути 'C: \ Users \ µkos \ Documents \ Tanul s \ diplomamunka \ softwareprojectqualityanalyser \ внедрить ci˘ \ Analizer \ Analizer \ bin \ Debug \ temp \ probaAnalisisReport. XML»..
Примечание:
Если я использую FxCopCmd.exe из cmd.exe, используя аргументы, сконструированные мной с помощью Edit / Paste, он работает нормально.
Среда разработки:
Windows 7 Prof EN, Язык ввода по умолчанию: венгерский, .NET 4.0, C # 4.0, VS2010 Ultimate
Код:
using (Process p = new Process())
{
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.FileName = this.FxCop10Path.LocalPath;
string fullpath = Assembly.GetExecutingAssembly().Location;
string dir = Path.GetDirectoryName(fullpath);
p.StartInfo.Arguments = "/o:\"" + dir + "\\temp\\" +
(this.ProjectName.Equals("") == true || this.ProjectName == null
? "noNameProjectAnalysisReport.xml" : this.ProjectName + "AnalisisReport.xml\"")
+ " /fo";
foreach (var item in this.Files)
{
p.StartInfo.Arguments += " /f:\"" + item.FilePath + "\"";
}
try
{
p.Start();
}
catch (Win32Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Спасибо за любую помощь!