Sonar-runner を介して FxCopCmd 10.0 を実行しようとしています。ただし、FxCop は分析レポートを生成してもエラーを返します。エラーを返すので、 sonar-runner はレポートを丸呑みしません。
問題を特定するために、プロンプトから FxCopCmd を実行しました。
返されるコンソール エラー メッセージは次のとおりです。
- FxCop の初期化中にエラーが発生しました:
- 設定ファイルの「Rules」ディレクトリの形式が正しくないか、存在しません。
FxCop 10.0 または 1.36 のどちらを実行しても、同じエラーが発生します。FxCop GUI を使用して新しい空のプロジェクトを作成し、それを開くと、Gui は同じエラー メッセージを報告しますが、すべてのルールが表示されます。
ログは、FxCop が分析を完了し、78 個のメッセージを出力したことを示しています。レポートには 78 個のメッセージが含まれています。また、ルールを見つけたようです。
次に何をチェックしようか迷っています。
コマンド発行
C:\svn\system-sr\tools\fxcop-10.0\FxCopCmd.exe /p:C:\svn\system-sr\src\com.me.mySystem\com.me.mySystem\.sonar\sonar.FxCop /out:C:\svn\system-sr\src\com.me.mySystem\com.me.mySystem\.sonar\fxcop-report.xml /f:C:\svn\system-sr\src\com.me.mySystem\com.me.mySystem\bin\com.me.mySystem.dll /igc /to:600 /gac /v > verbose.log
詳細ログの終わり
Cleaning Up Rules...
Analysis Complete.
Writing 78 messages...
Writing report to C:\svn\system-sr\src\com.me.mySystem\com.me.mySystem\.sonar\fxcop-report.xml...
Done:00:00:02.5852585
FxCop レポートの部分的な内容 (ログに示されているように、完全なレポートには 78 のメッセージが含まれています)
<!-- snipped -->
<Member Name="#MaintainStrataSelection()" Kind="Method" Static="False" Accessibility="Private" ExternallyVisible="False">
<Messages>
<Message Id="System.Int32.Parse(System.String)" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Status="Active" Created="2013-05-03 15:45:07Z" FixCategory="NonBreaking">
<Issue Name="IFormatProviderAlternate" Certainty="95" Level="Error" Path="c:\svn\system-sr\src\com.me.mySystem\com.me.mySystem\UserControl" File="ConfirmSubmitUserControl.ascx.cs" Line="388">Because the behavior of 'int.Parse(string)' could vary based on the current user's locale settings, replace this call in 'ConfirmSubmitUserControl.MaintainStrataSelection()' with a call to 'int.Parse(string, IFormatProvider)'. If the result of 'int.Parse(string, IFormatProvider)' will be based on input from the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will based on input stored and accessed by software, such as when it is loaded from disk or from a database, specify 'CultureInfo.InvariantCulture'.</Issue>
</Message>
</Messages>
</Member>
<Member Name="#Page_PreRender(System.Object,System.EventArgs)" Kind="Method" Static="False" Accessibility="Family" ExternallyVisible="True">
<Messages>
<Message Id="System.Int32.Parse(System.String)" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Status="Active" Created="2013-05-03 15:45:07Z" FixCategory="NonBreaking">
<Issue Name="IFormatProviderAlternate" Certainty="95" Level="Error" Path="c:\svn\system-sr\src\com.me.mySystem\com.me.mySystem\UserControl" File="ConfirmSubmitUserControl.ascx.cs" Line="105">Because the behavior of 'int.Parse(string)' could vary based on the current user's locale settings, replace this call in 'ConfirmSubmitUserControl.Page_PreRender(object, EventArgs)' with a call to 'int.Parse(string, IFormatProvider)'. If the result of 'int.Parse(string, IFormatProvider)' will be based on input from the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will based on input stored and accessed by software, such as when it is loaded from disk or from a database, specify 'CultureInfo.InvariantCulture'.</Issue>
</Message>
</Messages>
</Member>
<Member Name="#UpdatePageSelectedItems()" Kind="Method" Static="False" Accessibility="Private" ExternallyVisible="False">
<Messages>
<Message Id="System.Int32.ToString" TypeName="SpecifyIFormatProvider" Category="Microsoft.Globalization" CheckId="CA1305" Status="Active" Created="2013-05-03 15:45:07Z" FixCategory="NonBreaking">
<Issue Name="IFormatProviderAlternateString" Certainty="95" Level="Error" Path="c:\svn\system-sr\src\com.me.mySystem\com.me.mySystem\UserControl" File="ConfirmSubmitUserControl.ascx.cs" Line="507">Because the behavior of 'int.ToString()' could vary based on the current user's locale settings, replace this call in 'ConfirmSubmitUserControl.UpdatePageSelectedItems()' with a call to 'int.ToString(IFormatProvider)'. If the result of 'int.ToString(IFormatProvider)' will be displayed to the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will be stored and accessed by software, such as when it is persisted to disk or to a database, specify 'CultureInfo.InvariantCulture'.</Issue>
<Issue Name="IFormatProviderAlternateString" Certainty="95" Level="Error" Path="c:\svn\system-sr\src\com.me.mySystem\com.me.mySystem\UserControl" File="ConfirmSubmitUserControl.ascx.cs" Line="512">Because the behavior of 'int.ToString()' could vary based on the current user's locale settings, replace this call in 'ConfirmSubmitUserControl.UpdatePageSelectedItems()' with a call to 'int.ToString(IFormatProvider)'. If the result of 'int.ToString(IFormatProvider)' will be displayed to the user, specify 'CultureInfo.CurrentCulture' as the 'IFormatProvider' parameter. Otherwise, if the result will be stored and accessed by software, such as when it is persisted to disk or to a database, specify 'CultureInfo.InvariantCulture'.</Issue>
</Message>
</Messages>
</Member>
</Members>
</Type>
</Types>
</Namespace>
</Namespaces>
</Module>
</Modules>
</Target>
</Targets>
<Rules>
<!-- snipped -->
</Rules>
<Localized>
<!-- snipped -->
</Localized>
<DebugInfo>
<!-- snipped -->
</SearchPaths>
<ResolvedAssemblies>
<!-- snipped -->
</ResolvedAssemblies>
</DebugInfo>
<Exceptions>
<Exception Keyword="CA0001" Kind="Initialization">
<Type>Microsoft.FxCop.Sdk.FxCopException</Type>
<ExceptionMessage>'Rules' directory in settings file has bad format or does not exist.</ExceptionMessage>
</Exception>
</Exceptions>
</FxCopReport>