Một tiền thân nhanh để nói rằng tôi đã thực hiện tìm kiếm thông thường trên các diễn đàn và mạng nói chung, và tôi đã thử vô số đề xuất tìm thấy trên diễn đàn này và ở nơi khác không có kết quả.Thực hiện StyleCop MSBUILD từ Gói NuGet
Vấn đề tôi gặp phải là công ty của tôi đang tìm cách triển khai các đánh giá ngang hàng tự động nội bộ (với mức độ tất nhiên) với việc sử dụng các công cụ như StyleCop, ReSharper và JSLint (v.v.).
Chúng tôi đang sử dụng gói NuGet tùy chỉnh với Gói lưu trữ gói NuGet (feed) nội bộ của chúng tôi để các nhà phát triển của chúng tôi có được bản phát hành công cụ (nghĩa là họ không thể tải xuống StyleCop mới nhất cho đến khi được xem xét và phát hành) với việc bổ sung các quy tắc tùy chỉnh của chúng tôi (tệp Cài đặt StyleCop). Bởi vì chúng ta muốn sử dụng các nhiệm vụ của StyleCop MSBUILD để làm nổi bật các lỗi tại thời gian xây dựng, các assembly cho StyleCop cần phải chính xác và do đó chúng ta đang loại bỏ các bản cài đặt của C: \ Program Files \ phiên bản có lợi cho bản phát hành NuGet.
Tôi đã quản lý để tạo gói NuGet cài đặt cho dự án (thư viện lớp, trang web, v.v.), sao chép các hội đồng StyleCop được phê duyệt (StyleCop.dll, StyleCop.CSharp.dll và StyleCop.CSharpRules.dll) , Settings.StyleCop và StyleCop.Targets vào thư mục gói, và sửa đổi các file csproj để bao gồm các nút sau (đây chỉ là một đoạn của khóa học):
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(Configuration)' != 'Debug' ">
<StyleCopTreatErrorsAsWarnings>false</StyleCopTreatErrorsAsWarnings>
</PropertyGroup>
<Import Project="$(SolutionDir)\packages\NuGetPackageName.1.0.0\StyleCop.Targets" />
</Project>
Nếu tôi đã StyleCop cài đặt như C: \ Program Files \ và trong C: \ Program Files \ MSBUILD thì mọi thứ hoạt động, nhưng sử dụng phương thức này thì StyleCop.Targets dường như không hoạt động chính xác. Nó đang được sử dụng như Visual Studio 2010 ném lỗi nếu tập tin được loại bỏ và nó tạo ra một tập tin StyleCop.Cache. Tệp StyleCop.Targets đã được thay đổi để trỏ vào tệp DLL cục bộ trong thư mục gói NuGet và tôi đã thử một vài tệp .Targets khác nhau bao gồm tệp StyleCop tiêu chuẩn (với các thay đổi về tệp tương đối). Ngay cả khi tôi ghi đè lên các thuộc tính MSBUILD cục bộ, nó không hoạt động, chẳng hạn như OverrideSettingsFile.
Các StyleCop.Targets tập tin trông giống như hiện nay:
<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>
Có ai biết làm thế nào tôi có thể làm việc này? Visual Studio 2010 không hiển thị bất kỳ thư nào trong cửa sổ Output.
Chúc mừng tất cả!
FYI Tôi vừa mới phát hành gói StyleCop.MSBuild NuGet để sử dụng với các tập lệnh xây dựng, chứ không phải là tham chiếu lib. Xem https://nuget.org/packages/StyleCop.MSBuild –