来自 C# 包装器的 StyleCop 未检测到违规

StyleCop from C# wrapper not detecting violations

我正在使用 this GitHub 回购来尝试 运行 来自 CMD 的 StyleCop。我下载了 GitHub 存储库并使用 VS2017 在我的本地计算机上构建它。我尝试 运行 批处理脚本 这是我到目前为止所做的:

然后我尝试 运行 'sample.bat' (..\source\StyleCopCmdLine\bin\Debug\sample.bat),它执行以下操作(由源的所有者测试回购):

批处理脚本然后 运行s StyleCopCmdLine 和 returns 以下内容:

C:\Users\X\Desktop\Test\StyleCopCmdLine- 
master\source\StyleCopCmdLine\bin\Debug>Rem Runs the command line with 
reasonable parameters

C:\Users\X\Desktop\Test\StyleCopCmdLine- 
master\source\StyleCopCmdLine\bin\Debug>StyleCopCmdLine -- 
SourceFiles="..\..\..\StyleCopWrapper.Tests\TestFiles\FileWith7Errors.cs" -- 
s=@"..\..\..\StyleCopWrapper.Tests\TestFiles\AllSettingsEnabled.StyleCop"
StyleCopCmdLine 1.0.0.0
Copyright ©  2017

  -f, --SourceFiles                    Required. The files or folders to scan.
                                       Multiple files or folders can be listed

  -s, --SettingsFile                   Required. The settings to use.

  --AdditionalAddInPaths               (Default: System.String[]) The paths to
                                       rules files. Multiple folders can be
                                       listed

  --ShowOutput                         (Default: False) Show the addin of files
                                       to scan output in the log.

  --CacheResults                       (Default: False) Cache scan results.

  --XmlOutputFile                      (Default: .\stylecop.xml) Xml Output
                                       File.

  --LogFile                            (Default: .\stylecop.log) Log File.

  --ForceFullAnalysis                  (Default: True) Force a full analysis.

  --TreatViolationsErrorsAsWarnings    (Default: True) Treat violation errors
                                       as warnings.

  --MaximumViolationCount              (Default: 1000) Maximum violations
                                       before the scan is stopped.

  -v, --verbose                        (Default: True) Prints the configuration
                                       messages to standard output.

  --help                               Display this help screen.


SourceFiles: ..\..\..\StyleCopWrapper.Tests\TestFiles\FileWith7Errors.cs
SettingsFile: 
@..\..\..\StyleCopWrapper.Tests\TestFiles\AllSettingsEnabled.StyleCop
MaximumViolationCount: 1000
ShowOutput: False
CacheResults: False
ForceFullAnalysis: True
XmlOutputFile: .\stylecop.xml
LogFile: .\stylecop.log
TreatViolationsErrorsAsWarnings: True
AdditionalAddInPaths: C:\Program Files (x86)\StyleCop 4.7


No violations encountered
Succeeded [True]
Violation count [0]

C:\Users\X\Desktop\Test\StyleCopCmdLine-master\source\StyleCopCmdLine\bin\Debug>pause

如您所见,脚本 returns 没有违规,但是当我打开 StyleCopCmdLine 解决方案时,导航到文件 'FileWith7Errors',右键单击并单击 'Run StyleCop',它返回 7 次违规。

我也尝试创建我自己的 StyleCop 模块,它使用 StyleCopConsole(来自官方 StyleCop 存储库),但是当我 运行 它在任何有违规行为的文件上时(我确保我有权利已选择设置文件),我从来没有收到任何违规...

删除 C:\Program Files (x86)\StyleCop 4.7 得到完全相同的结果。

我尝试过的其他存储库要么出现错误,要么出现同样的问题:

为什么我到目前为止尝试的 none 方法复制了简单的 'RightClick->Run StyleCop'?

对于某些背景,我正在尝试从 CMD 或 PowerShell 运行 StyleCop 分析,以便我可以 运行 它作为 TFSBuild 2015 中的构建步骤。

编辑 - 这已经在多台机器上测试过,有同样的问题。

EDIT 2 - 在我将所有源代码文件加载到 StyleCop 分析器中,然后开始分析后,分析显示为 运行 ~< 0.1 秒——这显然是不对的,分析所有源代码文件的时间应该比这更长。我的想法是,在 StyleCop DLL 内部的某处,一个错误被捕获,但没有记录,然后分析完成,但它仍然 returns 'true' 表明分析成功,即使它显然是运行 正确...

所以事实证明它实际上不是 运行 分析正确的原因是因为我使用的插件路径。

初始化 StyleCopConsole class 时,需要以下参数:

StyleCopConsole(string settings, 
                bool writeResultsCache, 
                string outputFile, 
                ICollection<string> addInPaths, 
                bool loadFromDefaultPath);

之前,我要么将 'addInPaths' 定义为 null,要么显式传入两个 StyleCop CSharp DLL 路径。解决方法是将插件路径定义为系统上 StyleCop 的安装:

var addInPath = @"C:\Program Files (x86)\StyleCop 4.7";

然后 StyleCopConsole 将自己获取所有必要的 DLL。 分析现在使用这些设置运行