Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从NuGet包实现StyleCop MSBUILD_C#_Msbuild_Nuget_Stylecop - Fatal编程技术网

C# 从NuGet包实现StyleCop MSBUILD

C# 从NuGet包实现StyleCop MSBUILD,c#,msbuild,nuget,stylecop,C#,Msbuild,Nuget,Stylecop,这是一个很快的先兆,我已经在论坛和网络上做了通常的搜索,我尝试了在这个论坛和其他地方找到的大量建议,但都没有结果 我遇到的问题是,我的公司正在寻求通过使用StyleCop、ReSharper和JSLint(等等)等工具实现内部自动同行评审(当然在一定程度上) 我们对我们的内部NuGet包存储库(feed)使用自定义NuGet包,这样我们的开发人员就可以通过添加自定义规则(StyleCop设置文件)获得管理版本的工具(即,在最新StyleCop发布之前,他们无法下载最新的StyleCop)。因为我

这是一个很快的先兆,我已经在论坛和网络上做了通常的搜索,我尝试了在这个论坛和其他地方找到的大量建议,但都没有结果

我遇到的问题是,我的公司正在寻求通过使用StyleCop、ReSharper和JSLint(等等)等工具实现内部自动同行评审(当然在一定程度上)

我们对我们的内部NuGet包存储库(feed)使用自定义NuGet包,这样我们的开发人员就可以通过添加自定义规则(StyleCop设置文件)获得管理版本的工具(即,在最新StyleCop发布之前,他们无法下载最新的StyleCop)。因为我们希望在生成时使用StyleCop MSBUILD任务来突出显示错误,所以StyleCop的程序集需要精确,因此我们排除了C:\Program Files\version的安装,而支持NuGet版本

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


假的
如果已将StyleCop安装为C:\Program Files\并安装在C:\Program Files\MSBUILD中,则一切正常,但使用此方法,StyleCop.Targets似乎无法正常工作。如果删除该文件并创建StyleCop.Cache文件,则Visual Studio 2010会抛出错误。StyleCop.Targets文件已更改为poin在NuGet package文件夹的本地DLL中,我尝试了两个不同的.Targets文件,包括标准的StyleCop文件(具有相对文件路径更改)。即使我在本地重写MSBUILD属性,它也不起作用,例如OverrideSettingsFile

StyleCop.Targets文件当前如下所示:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <!-- Specify where tasks are implemented. -->
    <UsingTask AssemblyFile="$(SolutionDir)\packages\NuGetPackageName.1.0.0\lib\net40\StyleCop.dll" TaskName="StyleCopTask"/>

    <PropertyGroup>
        <BuildDependsOn>$(BuildDependsOn);StyleCop</BuildDependsOn>
        <RebuildDependsOn>StyleCopForceFullAnalysis;$(RebuildDependsOn)</RebuildDependsOn>
    </PropertyGroup>

    <!-- Define StyleCopForceFullAnalysis property. -->
    <PropertyGroup Condition="('$(SourceAnalysisForceFullAnalysis)' != '') and ('$(StyleCopForceFullAnalysis)' == '')">
        <StyleCopForceFullAnalysis>$(SourceAnalysisForceFullAnalysis)</StyleCopForceFullAnalysis>
    </PropertyGroup>
    <PropertyGroup Condition="'$(StyleCopForceFullAnalysis)' == ''">
        <StyleCopForceFullAnalysis>false</StyleCopForceFullAnalysis>
    </PropertyGroup>

    <!-- Define StyleCopCacheResults property. -->
    <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>

    <!-- Define StyleCopEnabled property. -->
    <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="('$(SourceAnalysisOutputFile)' != '') and ('$(StyleCopOutputFile)' == '')">
        <StyleCopOutputFile>$(SourceAnalysisOutputFile)</StyleCopOutputFile>
    </PropertyGroup>
    <PropertyGroup Condition="'$(StyleCopOutputFile)' == ''">
        <StyleCopOutputFile>$(IntermediateOutputPath)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)' == ''">0</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'">
        <Message Text="Forcing full StyleCop reanalysis." Condition="'$(StyleCopForceFullAnalysis)' == 'true'" Importance="Low" />

        <!-- 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="Analyzing @(StyleCopFiles)" Importance="Low" />

        <!-- Show list of what files should be excluded. checked. Take all Compile items, but exclude those that have set ExcludeFromStyleCop=true or ExcludeFromSourceAnalysis=true. -->
        <CreateItem Include="@(Compile)" Condition="('%(Compile.ExcludeFromStyleCop)' == 'true') or ('%(Compile.ExcludeFromSourceAnalysis)' == 'true')">
            <Output TaskParameter="Include" ItemName="StyleCopExcludedFiles"/>
        </CreateItem>

        <ItemGroup>
            <StyleCopFiles Remove="@(ExcludeFromStyleCop)" />
        </ItemGroup>

        <Message Text="Excluding @(StyleCopExcludedFiles)" Importance="Normal" />

        <!-- Run the StyleCop MSBuild task. -->
        <StyleCopTask ProjectFullPath="$(MSBuildProjectDirectory)" 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>

$(BuildDependsOn);StyleCop
样式共面分析;$(重建Pendson)
$(源分析)
假的
$(SourceAnalysisCacheResults)
真的
$(SourceAnalysisTreatErrorsAsWarnings)
真的
$(SourceAnalysisEnabled)
真的
$(SourceAnalysisOverrideSettingsFile)
$(SourceAnalysisOutputFile)
$(IntermediateOutputPath)StyleCopViolations.xml
0
有人知道我如何使其工作吗?Visual Studio 2010在输出窗口中不显示任何消息


干杯!

我正在发布我遇到的解决方案,供类似职位的人参考

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

接下来,我检查了我的/obj/Debug/文件夹中的stylecopinvalices.xml。但是,这始终返回0个结果,只有以下xml:

<StyleCopViolations/>

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

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

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

最后,请调试您的MSBuild(链接在本文顶部),不要使用NuGet包


Cheers

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


i、 e在软件包管理器控制台中使用命令
install package stylecop.msbuild

您可以使用nuget软件包stylecop.msbuildstylecop.Error.msbuild的组合,以将stylecop警告作为错误启用。

打开和关闭Windows功能,并确保.Net Framework已启用选中的


然后重建您的项目。

仅供参考,我刚刚发布了StyleCop.MSBuild NuGet包,用于生成脚本,而不是作为lib参考。请参阅Argh…感谢您的解决方案!我已尝试使用
NuGet
包中的
StyleCop
来构建我自己的场景,但它什么也没做。问题在于缺少
StyleCop.CSharpRules.dll
。然后我切换到“
StyleCop.MSBuild
NuGet
包,其中包含
StyleCop.CSharpRules.dll
,现在一切正常!
<StyleCopViolations/>