10

Tôi đang cố gắng để có được msbuild để thông tin phân tích mã đầu ra giống như nó trong VS. Tôi có một cấu hình cho dự án của tôi được gọi là "CodeAnalysis" trong VS được thiết lập để chạy phân tích mã về xây dựng (với ruleset tối thiểu). Dù sao điều này là làm việc tốt trong VS, nhưng khi tôi chạy msbuild từ dòng lệnh nó chỉ hiển thị các cảnh báo xây dựng cơ bản và nó không chạy phân tích mã cả. Có ai biết tại sao chuyện này xảy ra không?RunCodeAnalysis = true không hoạt động trong dấu nhắc lệnh (MSBuild)

Cấu hình trong tập tin dự án:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'CodeAnalysis|AnyCPU'"> 
<OutputPath>bin\</OutputPath> 
<CodeAnalysisRuleSet>C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\Rule Sets\MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> 
<RunCodeAnalysis>true</RunCodeAnalysis> 

dòng lệnh:

msbuild Solution.sln /p:Configuration=CodeAnalysis /t:Rebuild 

Tôi cũng đã cố gắng:

msbuild Solution.sln /p:RunCodeAnalysis=true /t:Rebuild 
+2

chạy với ghi nhật ký mức chẩn đoán (/ fl /flp:v=diag;logfile=diag.log) và tìm kiếm lý do tại sao mục tiêu RunCodeAnalysis bị bỏ qua. Nó sẽ được chạy như một sự phụ thuộc của PrepareForRun được chạy như một sự phụ thuộc của CoreBuild. –

+0

Kiểm tra xem thuộc tính $ (CodeAnalysisPath), $ (CodeAnalysisTargets) đã thiết lập và tham chiếu đường dẫn phân tích mã hợp lệ, về cơ bản chỉ cần in chúng ra bên trong một tập lệnh – sll

+0

@BrianKretzler Cảm ơn bạn đã tìm mẹo. Có điều gì đặc biệt tôi nên tìm? Tôi tìm thấy những điều sau đây: CoreBuildDependsOn = PrepareForRun; PrepareForRunDependsOn = RunCodeAnalysis; Tôi cũng nhận thấy rằng tại hành động corebuild nó nói: Nhiệm vụ "CallTarget" bỏ qua, do điều kiện sai; ('$ (UnloadProjectsOnCompletion)' == 'true') được đánh giá là ('false' == 'true') ..... điều này có liên quan không? –

Trả lời

1

Bạn cần có Visual Studio cài đặt trên máy móc. Có rất nhiều tập lệnh được bao gồm qua dòng csproj:

Khi bạn đã cài đặt VS (của phiên bản thích hợp), nó sẽ bao gồm tệp mục tiêu FxCop và sẽ bắt đầu Phân tích mã cho bạn.

+0

Theo tôi được biết FxCop phân tích và Visual Phân tích mã Studio không giống nhau. – Zitrax

+0

Chúng giống nhau. Phân tích mã chỉ có nhiều quy tắc hơn bây giờ và với năm 2015 nó cũng hỗ trợ phân tích Roslyn. fxCop sẽ không bao giờ ủng hộ chúng. – jessehouwing

9

Theo mặc định, MSBuild sử dụng giá trị cấu hình trong hồ sơ dự án, nhưng bạn có thể ghi đè lên nó trên dòng lệnh msbuild sử dụng lập luận

/p:RunCodeAnalysis=true 

luôn chạy phân tích mã. Ngược lại, sử dụng

/p:RunCodeAnalysis=false 

để tắt phân tích mã.

Xem thêm:

+0

Luôn luôn và Không bao giờ là các giá trị được trình bày bởi cấu hình xây dựng XAML, nhưng dưới mui xe chúng được dịch sang 'true' và' false' khi được truyền cho MsBuild. – jessehouwing

0

Khi tôi phải đối mặt với cùng một vấn đề, tôi bắt đầu bằng cách nhận một (quá) verbose log và được truyền dẫn nó vào một tập tin mà tôi có thể kiểm tra:

msbuild.exe ProjectFile.csproj /v:diag > bld.log 

Trong tệp đó, tôi nhận thấy rằng mục tiêu Phân tích mã bị bỏ qua vì RunCodeAnalysisOnThisProject được đánh giá là đúng. Vì vậy, trong csproj, tôi đã bao gồm dòng sau trong nhóm thuộc tính đầu tiên:

<RunCodeAnalysisOnThisProject>true</RunCodeAnalysisOnThisProject> 

đã làm điều đó cho tôi.