Проблема:
Мне нужно использовать FxCopCmd.exe (FxCop 10.0) из моего кода, и моя проблема в том, что FxCopCmd получает мои аргументы (см. Ниже p.StartInfo.Arguments) с некоторой проблемой кодирования, я полагаю. (У меня нет опыта кодирования или локализации.)
Пример:
Аргументы, которые я строю:
/o:"C:\Users\Ákos\Documents\Tanulás\diplomamunka\softwareprojectqualityanalyser\implementáció\Analizer\Analizer\bin\Debug\temp\probaAnalisisReport.xml" /fo /f:"C:\Users\Ákos\Documents\ Visual Studio 2010\Projects\TeaBoiler\TeaBoiler\bin\Release\TeaBoiler.exe"
Сообщение об ошибке FxCopCmd:
Не удалось открыть выходной файл: не удалось найти часть пути «C:\Users\µkos\Documents\Tanul s\diplomamunka\softwareprojectqualityanalyser\implement 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);
}
}
Спасибо за любую помощь!