- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我被要求以如下方式将 StyleCop 集成到我们的 CI 构建过程中:
<target name="buildSolution">
<echo message="Building solution..." />
<exec program="C:\WINDOWS\Microsoft.NET\Framework\v3.5\msbuild.exe"
commandline="${Project.SolutionFile} /t:Rebuild /p:Configuration=${Project.SolutionBuildConfiguration} /v:q" workingdir="." />
</target>
最佳答案
我们已经成功做到了这一点。只需按照以下步骤操作:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask AssemblyFile="Microsoft.StyleCop.dll" TaskName="StyleCopTask" />
<PropertyGroup>
<BuildDependsOn>StyleCop</BuildDependsOn>
<RebuildDependsOn>StyleCopForceFullAnalysis;StyleCop</RebuildDependsOn>
</PropertyGroup>
<PropertyGroup Condition="('$(SourceAnalysisForceFullAnalysis)' != '') and ('$(StyleCopForceFullAnalysis)' == '')">
<StyleCopForceFullAnalysis>$(SourceAnalysisForceFullAnalysis)</StyleCopForceFullAnalysis>
</PropertyGroup>
<PropertyGroup Condition="'$(StyleCopForceFullAnalysis)' == ''">
<StyleCopForceFullAnalysis>false</StyleCopForceFullAnalysis>
</PropertyGroup>
<PropertyGroup Condition="('$(SourceAnalysisCacheResults)' != '') and ('$(StyleCopCacheResults)' == '')">
<StyleCopCacheResults>$(SourceAnalysisCacheResults)</StyleCopCacheResults>
</PropertyGroup>
<PropertyGroup Condition="'$(StyleCopCacheResults)' == ''">
<StyleCopCacheResults>true</StyleCopCacheResults>
</PropertyGroup>
<!-- Define StyleCopTreatErrorsAsWarnings property. -->
<PropertyGroup Condition="('$(SourceAnalysisTreatErrorsAsWarnings)' != '') and ('$(StyleCopTreatErrorsAsWarnings)' == '')">
<StyleCopTreatErrorsAsWarnings>$(SourceAnalysisTreatErrorsAsWarnings)</StyleCopTreatErrorsAsWarnings>
</PropertyGroup>
<PropertyGroup Condition="'$(StyleCopTreatErrorsAsWarnings)' == ''">
<StyleCopTreatErrorsAsWarnings>true</StyleCopTreatErrorsAsWarnings>
</PropertyGroup>
<PropertyGroup Condition="('$(SourceAnalysisEnabled)' != '') and ('$(StyleCopEnabled)' == '')">
<StyleCopEnabled>$(SourceAnalysisEnabled)</StyleCopEnabled>
</PropertyGroup>
<PropertyGroup Condition="'$(StyleCopEnabled)' == ''">
<StyleCopEnabled>true</StyleCopEnabled>
</PropertyGroup>
<!-- Define StyleCopOverrideSettingsFile property. -->
<PropertyGroup Condition="('$(SourceAnalysisOverrideSettingsFile)' != '') and ('$(StyleCopOverrideSettingsFile)' == '')">
<StyleCopOverrideSettingsFile>$(SourceAnalysisOverrideSettingsFile)</StyleCopOverrideSettingsFile>
</PropertyGroup>
<PropertyGroup Condition="'$(StyleCopOverrideSettingsFile)' == ''">
<StyleCopOverrideSettingsFile> </StyleCopOverrideSettingsFile>
</PropertyGroup>
<!-- Define StyleCopOutputFile property. -->
<PropertyGroup Condition="('$(StyleCopOutputPath)' == '')">
<StyleCopOutputPath>$(IntermediateOutputPath)</StyleCopOutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(StyleCopOutputFile)' == ''">
<StyleCopOutputFile Condition="!HasTrailingSlash('$(StyleCopOutputPath)')">$(StyleCopOutputPath)\$(AssemblyName).StyleCopViolations.xml</StyleCopOutputFile>
<StyleCopOutputFile Condition="HasTrailingSlash('$(StyleCopOutputPath)')">$(StyleCopOutputPath)$(AssemblyName).StyleCopViolations.xml</StyleCopOutputFile>
</PropertyGroup>
<!-- Define all new properties which do not need to have both StyleCop and SourceAnalysis variations. -->
<PropertyGroup>
<!-- Specifying 0 will cause StyleCop to use the default violation count limit.
Specifying any positive number will cause StyleCop to use that number as the violation count limit.
Specifying any negative number will cause StyleCop to allow any number of violations without limit. -->
<StyleCopMaxViolationCount Condition="'$(StyleCopMaxViolationCount)' == ''">100</StyleCopMaxViolationCount>
</PropertyGroup>
<!-- Define target: StyleCopForceFullAnalysis -->
<Target Name="StyleCopForceFullAnalysis">
<CreateProperty Value="true">
<Output TaskParameter="Value" PropertyName="StyleCopForceFullAnalysis" />
</CreateProperty>
</Target>
<!-- Define target: StyleCop -->
<Target Name="StyleCop" Condition="'$(StyleCopEnabled)' != 'false'">
<!-- Determine what files should be checked. Take all Compile items, but exclude those that have set ExcludeFromStyleCop=true or ExcludeFromSourceAnalysis=true. -->
<CreateItem Include="@(Compile)" Condition="('%(Compile.ExcludeFromStyleCop)' != 'true') and ('%(Compile.ExcludeFromSourceAnalysis)' != 'true')">
<Output TaskParameter="Include" ItemName="StyleCopFiles"/>
</CreateItem>
<Message Text="Forcing full StyleCop reanalysis." Condition="'$(StyleCopForceFullAnalysis)' == 'true'" Importance="Low" />
<Message Text="Analyzing @(StyleCopFiles)" Importance="Low" />
<!-- Run the StyleCop MSBuild task. -->
<StyleCopTask
ProjectFullPath="$(MSBuildProjectFile)"
SourceFiles="@(StyleCopFiles)"
AdditionalAddinPaths="@(StyleCopAdditionalAddinPaths)"
ForceFullAnalysis="$(StyleCopForceFullAnalysis)"
DefineConstants="$(DefineConstants)"
TreatErrorsAsWarnings="$(StyleCopTreatErrorsAsWarnings)"
CacheResults="$(StyleCopCacheResults)"
OverrideSettingsFile="$(StyleCopOverrideSettingsFile)"
OutputFile="$(StyleCopOutputFile)"
MaxViolationCount="$(StyleCopMaxViolationCount)"
/>
<!-- Make output files cleanable -->
<CreateItem Include="$(StyleCopOutputFile)">
<Output TaskParameter="Include" ItemName="FileWrites"/>
</CreateItem>
<!-- Add the StyleCop.cache file to the list of files we've written - so they can be cleaned up on a Build Clean. -->
<CreateItem Include="StyleCop.Cache" Condition="'$(StyleCopCacheResults)' == 'true'">
<Output TaskParameter="Include" ItemName="FileWrites"/>
</CreateItem>
</Target>
</Project>
<msbuild project="${solutionfile}" target="ReBuild" verbosity="Quiet">
<property name="CustomAfterMicrosoftCommonTargets" value="${path::combine(project:get-base-directory(), relative-path-to-Microsoft.StyleCop.Targets)}"/>
<property name="Configuration" value="Release"/>
<property name="StyleCopEnabled" value="true" />
<property name="StyleCopOutputPath" value="${directory-to-dump-output-report-to}" />
<arg value="/noconsolelogger" />
</msbuild>
关于.net - StyleCop 与 CI 构建过程(Cruise Control、Nant、msbuild 和 StyleCop)的集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1295251/
我正在使用 nant 来构建我们的产品,并编写了一个自定义任务来通知我们的服务台系统有新的构建版本可用。 我使用 nant 构建自定义任务,并将自定义 nant 任务程序集复制到 nant 文件夹中,
NAnt 是否仍在积极开发中,或者是否有其他项目在自动构建领域获得更多动力? 编辑: 显然,MSBuild 会继续进步,但考虑到可以使用 NAnt 完成的所有额外任务,为什么开发突然停止,因为许多开源
我正在使用 NAnt 以不同的配置为同一软件构建 5 个不同的安装程序包。这些任务可以并行化,因为它们不相互依赖。正在构建这些配置的 Installshield 在多核 CPU 使用率方面似乎效率低下
我知道 NAnt 经常被使用(嗯,我总是将它用于我的 CI 构建)但是自 2007 年 12 月以来没有新的正式版本。该项目是在接受积极的开发还是已经死池了?让我担心的是,如果我继续使用它,并且它停止
我正在尝试编写一个自定义 NAnt 任务来执行一些基于文件的操作。其中一项非常有用的功能是运行 的能力。过滤其中一个输入文件。 为了保持任务的通用性,我只想启用对 的支持元素(类似于 任务的工作
我有一个 nant 脚本,我看到即使我的 exec 失败,NANT 的退出代码仍然是 0。如何更改 NANT 退出代码? 最佳答案 exec task有一个名为“resultproperty”的属性,
我在这里有一个大项目,我在其中创建了一些构建文件,这些文件用于不同的场景,包括 ccnet。所以,我有 BF1.build 和 BF2.build 我只想在 BF1 的某个地方调用/执行来自 BF2.
我在构建文件中有一个 fileset 元素定义为: 当它运行时(作为复制任务的一部分),如果任何文件丢失它都不会提示。虽然我可以在 fileset 元素中使用 failonem
我想使用 ant 脚本创建一个文件。像 mkdir 一样,在 nant 脚本中可以使用任何命令来创建文本或 doc 文件吗? 最佳答案 您可以使用 创建文件(或更新其时间戳)的任务。使用 您可以将
首先,我已经看过这个帖子了:nant mail issues但唯一的答案并不令人满意(即:对我不起作用)。 我正在使用 NAnt 获取最新版本的源代码、升级库和应用程序版本、构建应用程序、build设
NAnt 构建文件中用于项目、目标、任务、函数等的关键字是否区分大小写? 最佳答案 试试这个 NAnt 构建脚本: 这是输出: test:
我正在寻找一种在单独的线程上执行的能力,并具有在执行完成后加入那些单独的线程的能力...在任何版本的NAnt中是否存在这样的事情? 最佳答案 从注释中:Parallel task execution
我有一个通用的 common.xml 文件,其中包含许多在多个构建中重复使用的通用 nant 目标。我想要做的是“覆盖”其中一些 nant 目标,并在执行现有目标之前或之后包括其他步骤。 是否首先使用
我不是 Nant 的专家,所以我不得不问这个 redicolus 问题。 我有一个名为 svn.source.root 的变量指向 c:\folderA\FolderB\FolderC 我怎样才能让
我正在尝试使用 Nant 替换 wxs 文件中出现的字符串。 我只找到了下面的例子,它使用了 ,但它似乎只能在复制的文件中使用。有没有其他方法可以替换字符串而不实际复制文件?
有谁知道如何使用带有换行符的 echo 输出消息,在 Ant 世界中我使用了 ${line.seperator},但我在 Nant 中没有看到任何相关属性,也没有任何函数提供此信息。我也尝试了\n 转
我正在寻找我的构建来删除目录的内容而不触及某个文件夹。下面是我正在尝试的,它甚至对我来说看起来是错误的......除了当我运行它时它会爆炸这一事实。我是否需要明确删除该目录的内容,同时排除我的 Rep
我怎样才能单独从属性文件中读取一个值。例如,如何从以下示例中读取 build.home 或 temp.dir 的值。 env.properties 的内容 build.home=c:\build te
目前我正在调用 findstr 并将输出存储在一个属性中以供事后检查 - 我确信一定有更好的解决方案。 这真的是最好的方法吗? 最佳答案 关于nant - 如何检查文件是否包含
我正在尝试并行运行多个任务以减少构建时间。但似乎任务正在一个接一个地依次执行。这对我的构建花费了太多时间。有没有办法在 NAnt 中并行运行多个任务? 最佳答案 之前好像问过这个问题。见 NAnt:
我是一名优秀的程序员,十分优秀!