从NuGet包实现StyleCop MSBUILD

一个快速的先兆,说我已经在论坛和网络上进行了一般性的搜索,我已经尝试了在这个论坛和其他地方发现的大量建议无济于事。

我遇到的问题是我的公司正在寻求使用StyleCop,ReSharper和JSLint(等等)等工具实现内部自动化同行评审(在某种程度上)。

我们正在使用针对我们内部NuGet包存储库(feed)的自定义NuGet包,以便我们的开发人员获得管理版本的工具(即,在它出现之前,它们无法下载最新的StyleCop,直到它被审查和发布),并添加了我们的自定义规则(StyleCop设置文件)。 因为我们希望使用StyleCop MSBUILD任务在构建时突出显示错误,所以StyleCop的程序集必须精确,因此我们排除了C:\ Program Files \版本的安装,转而支持NuGet版本。

我已经设法创建一个安装到项目(类库,网站等)的NuGet包,复制批准的StyleCop程序集(StyleCop.dll,StyleCop.CSharp.dll和StyleCop.CSharpRules.dll),Settings.StyleCop和StyleCop.Targets到包文件夹,并修改.csproj文件以包含以下节点(当然这只是一个片段):

   false    

如果我将StyleCop安装为C:\ Program Files \并且在C:\ Program Files \ MSBUILD中,那么一切正常,但使用此方法,StyleCop.Targets似乎无法正常工作。 如果文件被删除并且它创建了一个StyleCop.Cache文件,它将被用作Visual Studio 2010引发错误。 StyleCop.Targets文件已更改为指向NuGet包文件夹中的本地DLL,我尝试了几个不同的.Targets文件,包括标准的StyleCop文件(相对文件路径更改)。 即使我在本地覆盖MSBUILD属性它也不起作用,例如OverrideSettingsFile。

StyleCop.Targets文件目前看起来像这样:

     $(BuildDependsOn);StyleCop StyleCopForceFullAnalysis;$(RebuildDependsOn)    $(SourceAnalysisForceFullAnalysis)   false    $(SourceAnalysisCacheResults)   true    $(SourceAnalysisTreatErrorsAsWarnings)   true    $(SourceAnalysisEnabled)   true    $(SourceAnalysisOverrideSettingsFile)        $(SourceAnalysisOutputFile)   $(IntermediateOutputPath)StyleCopViolations.xml     0                                    

有谁知道我怎么能这样工作? Visual Studio 2010不会在“输出”窗口中显示任何消息。

干得好!

我发布了我遇到过类似位置的人的解决方案。

首先,我按照这个关于调试MSBuild操作的优秀指南,这帮助我解决了一些逻辑和变量:

http://blogs.msdn.com/b/visualstudio/archive/2010/07/06/debugging-msbuild-script-with-visual-studio.aspx

接下来,我检查了我的/ obj / Debug /文件夹中的StyleCopViolations.xml。 但总是返回0结果,只有以下XML:

  

我做了一些研究,发现我需要将StyleCop.CSharpRules.dll包含在我的NuGet / lib / net40 /文件夹中,包含StyleCop.dll,StyleCop.CSharp.dll和StyleCop.Settings文件。

我的项目不需要引用任何上述程序集,但我意识到我的NuGet包依赖于StyleCop NuGet包,它不包含StyleCop.CSharpRules.dll。

添加此程序集后,我仍然看到0结果,所以我从全新安装的StyleCop C:\ Program Files \ StyleCop \ installer(来自CodePlex)手动覆盖了所有3个程序集和.Settings文件。 覆盖NuGet包assembly件后,这开始工作了!

所以要结束,调试你的MSBuild(使用这篇文章顶部的链接),不要使用NuGet包!

干杯

使用StyleCop.MSBuild而不是Dmitry Lobanov建议的StyleCop

即在包管理器控制台中使用命令install-package stylecop.msbuild

您可以使用nuget包StyleCop.MSBuildStyleCop.Error.MSBuild的组合来将stylecop警告设置为错误。