Проблема кодирования аргумента FxCopCmd - PullRequest
1 голос
/ 20 февраля 2011

Проблема:

Мне нужно использовать 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);
            }
        }

Спасибо за любую помощь!

1 Ответ

1 голос
/ 22 февраля 2011

Попробуйте разбить сразу после установки аргументов. Посмотрите, что он генерирует, а затем скопируйте и вставьте в окно cmd и посмотрите, что происходит. Кроме того, существует ли папка 'temp'? Если нет, вы уверены, что FxCop создает папку?

...