来自 C# 包装器的 StyleCop 未检测到违规
StyleCop from C# wrapper not detecting violations
我正在使用 this GitHub 回购来尝试 运行 来自 CMD 的 StyleCop。我下载了 GitHub 存储库并使用 VS2017 在我的本地计算机上构建它。我尝试 运行 批处理脚本
这是我到目前为止所做的:
- 以 ZIP 格式下载并解压缩到文件夹中。
- 在 VS2017 中打开解决方案并构建它(没有错误)。
然后我尝试 运行 'sample.bat' (..\source\StyleCopCmdLine\bin\Debug\sample.bat),它执行以下操作(由源的所有者测试回购):
- 加载源文件..\source\StyleCopWrapper.Tests\Testfiles\FileWith7Errors.cs
- 加载设置文件..\source\StyleCopWrapper.Tests\TestFiles\AllSettingsEnabled.StyleCop
批处理脚本然后 运行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 得到完全相同的结果。
我尝试过的其他存储库要么出现错误,要么出现同样的问题:
- StyleCopCLI
- StyleCopCmd
- StyleCop-Runner
- StyleCopConsole
为什么我到目前为止尝试的 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。
分析现在使用这些设置运行
我正在使用 this GitHub 回购来尝试 运行 来自 CMD 的 StyleCop。我下载了 GitHub 存储库并使用 VS2017 在我的本地计算机上构建它。我尝试 运行 批处理脚本 这是我到目前为止所做的:
- 以 ZIP 格式下载并解压缩到文件夹中。
- 在 VS2017 中打开解决方案并构建它(没有错误)。
然后我尝试 运行 'sample.bat' (..\source\StyleCopCmdLine\bin\Debug\sample.bat),它执行以下操作(由源的所有者测试回购):
- 加载源文件..\source\StyleCopWrapper.Tests\Testfiles\FileWith7Errors.cs
- 加载设置文件..\source\StyleCopWrapper.Tests\TestFiles\AllSettingsEnabled.StyleCop
批处理脚本然后 运行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 得到完全相同的结果。
我尝试过的其他存储库要么出现错误,要么出现同样的问题:
- StyleCopCLI
- StyleCopCmd
- StyleCop-Runner
- StyleCopConsole
为什么我到目前为止尝试的 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。 分析现在使用这些设置运行