問題:
コードから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\implementci˘\Analizer\ Analizer \ bin \ Debug \ temp\probaAnalisisReport.xml'の一部が見つかりませんでした。 。
ノート:
編集/貼り付けを使用して作成した引数を使用してcmd.exeからFxCopCmd.exeを使用すると、正常に機能します。
開発環境:
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);
}
}
助けてくれてありがとう!