Проблема с кодировкой аргумента FxCopCmd

Проблема:

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

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


person ike    schedule 20.02.2011    source источник
comment
Попробуйте сломать сразу после установки аргументов. Посмотрите, что он генерирует, а затем скопируйте и вставьте в окно cmd и посмотрите, что происходит. Кроме того, существует ли папка «temp»? Если нет, вы уверены, что FxCop создает папку?   -  person Dustin Davis    schedule 20.02.2011
comment
Я знал, что он не создаст несуществующую временную папку ... что за нуб ... но я думал, что причиной проблемы были разделенные символы в пути. Но нет. Кстати, как я могу отметить ваш ответ? Вы должны опубликовать ответ! Большое спасибо!   -  person ike    schedule 21.02.2011
comment
@DustinDavis: опубликуйте свой комментарий в качестве ответа, так как он помог решить проблему @ike.   -  person Bernard    schedule 22.02.2011
comment
Сделанный. Рад, что смог помочь.   -  person Dustin Davis    schedule 23.02.2011


Ответы (1)


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

person Dustin Davis    schedule 22.02.2011