2011-06-20 26 views
6

Không có nhiều thông tin dễ tìm về quy tắc phân tích mã tùy chỉnh cho Visual Studio 2010. Mặc dù đây là những gì tôi đã tìm thấy liên quan đến câu hỏi của tôi ...Tham khảo thư viện quy tắc phân tích mã tùy chỉnh bằng cách sử dụng tệp ruleset

Trong sample library on CodePlex nó được hiển thị cách triển khai thư viện quy tắc phân tích mã tùy chỉnh, sử dụng Dự án thiết lập để kết xuất DLL của thư viện thành Thư mục tệp chương trình -> Microsoft Visual Studio 10.0 -> Công cụ nhóm -> Công cụ phân tích tĩnh - > FxCop -> Quy tắc.

Hơn nữa, rất hữu ích như thế nào-to blog post by Duke Kamstra cũng gợi ý để sao chép dll của thư viện vào % Program Files% \ Microsoft Visual Studio 10.0 \ Tools \ Đội tĩnh cụ phân tích \ FxCop \ Rules.

Sở thích của tôi là tránh gắn bó các tệp DLL ở một vị trí toàn cầu như vậy. Tôi muốn có DLL liên quan đến các giải pháp Visual Studio của tôi, do đó khi tôi cập nhật DLL với một số thay đổi quy tắc phân tích mã tùy chỉnh thì tôi không cần thực hiện thêm một bước để giữ cho các phụ thuộc của DLL được cập nhật.

Một giải pháp hoàn hảo cho tôi là có một tập tin tuỳ chỉnh * .ruleset nhận biết đường dẫn tương đối của DLL, nhưng tôi đã không thành công khi làm như vậy.

Mọi đề xuất?

Trả lời

4

Trong tệp .ruleset của bạn, bạn sẽ có thể thêm đường dẫn tương đối vào DLL quy tắc tùy chỉnh. ví dụ:

<?xml version="1.0" encoding="utf-8"?> 
<RuleSet Name="Sample" Description="Sample ruleset" ToolsVersion="10.0"> 
    <RuleHintPaths> 
    <Path>..\Tools\FxCop\SomeRules.dll</Path> 
    <Path>..\Tools\FxCop\SomeOtherRules.dll</Path> 
    </RuleHintPaths> 
    ... 
</RuleSet> 
+0

Bạn có biết đường dẫn liên quan đến cái gì không? Có liên quan đến vị trí của tệp .ruleset không? – RobSiklos

+0

Các đường dẫn có liên quan đến dự án. – Raithlin

3

tôi thấy ngay cả những con đường đúng dự án tương đối tương đối (cung cấp như Nicole's answer) để lắp ráp quy tắc tùy chỉnh của tôi không gây ra quy tắc của tôi xuất hiện trong trình soạn thảo Bộ quy tắc, trong khi một đường dẫn tuyệt đối đến cùng một assembly đã làm làm cho các quy tắc hiển thị. Khi tôi bật các quy tắc và sau đó thay đổi đường dẫn trở lại đường dẫn tương đối, các quy tắc vẫn còn trong trình chỉnh sửa và được chạy trong khi phân tích nguồn. Nếu tôi bỏ chọn các quy tắc có đường dẫn tương đối được chỉ định, các quy tắc sẽ biến mất - điều này có vẻ giống như một lỗi trong trình chỉnh sửa quy tắc. Vì vậy, nếu quy tắc của bạn dường như không xuất hiện khi chỉ định đường dẫn tương đối, hãy thử sử dụng đường dẫn tuyệt đối, bật quy tắc và sau đó chuyển về đường dẫn tương đối (so với vị trí dự án trên @Raithlin).

0

Vấn đề này dường như cũng ảnh hưởng đến VS 2013. Tôi đã tìm thấy rằng nhập thủ công đường dẫn tương đối vào quy tắc quy tắc từ hội đồng đó sẽ dẫn đến các quy tắc đó xuất hiện khi tôi mở ruleset bằng cách sử dụng ruleset của Visual Studio giao diện người dùng thiết kế. Các quy tắc cũng sẽ được chạy.

Vì vậy, một hoạt động CustomRules.ruleset có thể nhìn như thế này, nơi SR1000 là một quy luật từ SomeRules.dllSOR1000 là từ SomeOtherRules.dll. Lưu ý rằng phiên bản công cụ là 12.0 cho Visual Studio 2013.

<?xml version="1.0" encoding="utf-8"?> 
<RuleSet Name="Sample" Description="Sample ruleset" ToolsVersion="12.0"> 
    <RuleHintPaths> 
    <Path>..\Tools\FxCop\SomeRules.dll</Path> 
    <Path>..\Tools\FxCop\SomeOtherRules.dll</Path> 
    </RuleHintPaths> 
    <Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed"> 
    <Rule Id="SR1000" Action="Error" /> 
    <Rule Id="SOR1000" Action="Warning" /> 
    <!-- etc. --> 
    </Rules> 
</RuleSet> 

Lưu ý rằng bạn có thể dễ dàng bao gồm quy tắc chuẩn của Microsoft bằng cách thêm bao gồm như thế này để RuleSet:

<Include Path="minimumrecommendedrules.ruleset" Action="Default" /> 
0

Tôi đang sử dụng Visual Studio C# 2015 với Bản cập nhật 2.Quy tắc tùy chỉnh của tôi không hiển thị trong trình soạn thảo ruleset của Visual Studio 2015. Tuy nhiên, khi tôi chạy CodeAnalysis, các vi phạm xuất hiện nếu có. RuleHintPath của tôi trông như thế này và là tương đối so với vị trí của file ruleset:

<RuleHintPaths> 
    <Path>..\Rules</Path> 
</RuleHintPaths> 

Vì vậy, bởi vì các vi phạm được phát hiện, đó là một thực tế là các DLL nguyên tắc được tìm thấy bởi các đường dẫn tương đối nhất định. Tại sao các quy tắc không hiển thị trong trình soạn thảo ruleset là câu hỏi. Đó là lý do tại sao tôi giả định một lỗi của trình soạn thảo.

Các vấn đề liên quan