2013-11-28 35 views
8

Tôi đang cố gắng xây dựng gói NuGet bổ sung từ điển phân tích mã của công ty chúng tôi tự động và có thể cập nhật.Thêm quy tắc phân tích mã thông qua gói nuget

Tập quy tắc được thêm vào thư mục nội dung và bây giờ tôi muốn sử dụng tập lệnh install.ps1 để thêm quy tắc được đặt trong tệp dự án.
Tôi đã tìm ra cách để đi sẽ là sử dụng envDTE, nhưng tôi không thể tìm thấy nhiều tài liệu hữu ích về nó khác thì đồ thị đối tượng áp đảo này mà tôi không thể tìm thấy nút CodeAnalysisRuleset.
http://msdn.microsoft.com/en-us/library/za2b25t3(v=vs.100).aspx

Tôi có đang theo đúng con đường không?
Có hướng dẫn/tài liệu liên quan nào về cách sử dụng envDTE trong NuGet powershell không?
Làm cách nào để chạy/gỡ lỗi tập lệnh cài đặt mà không phải thêm tập lệnh đó vào gói và cài đặt nó vào dự án?

Sidenote
Mặc dù @Nicole Calinoiu cho thấy cách tốt hơn, miếng thông tin này có thể có ích sau này:

foreach ($config in $project.ConfigurationManager){ 
    $config.Properties.Item("CodeAnalysisRuleSet").Value = "myruleset.ruleset" 
} 

Trả lời

15

Không cần đến kịch bản này. Cả quy tắc và từ điển đều có thể được đăng ký thông qua tệp MSBuild .props đã nhập, như được mô tả tại http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Import_MSBuild_targets_and_props_files_into_project_(Requires_NuGet_2.5_or_above).

Ví dụ, NuGet cấu trúc thư mục nguồn của bạn có thể trông như thế này (giả sử "CodeAnalysisSettings" là ID của bạn gói):

  • build
    • CodeAnalysisSettings.props
  • nội dung
    • MyCustomDictionary.xml
    • MyRules.ruleset

nơi nội dung của CodeAnalysisSettings.props là một cái gì đó như sau:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <RunCodeAnalysis>true</RunCodeAnalysis> 
     <CodeAnalysisRuleSet>MyRules.ruleset</CodeAnalysisRuleSet> 
    </PropertyGroup> 
    <ItemGroup> 
     <CodeAnalysisDictionary Include="MyCustomDictionary.xml" /> 
    </ItemGroup> 
</Project> 
+0

Chết tiệt! Tôi chỉ tìm thấy nó tối hôm qua! Và tôi đã hoàn thành gói để nhập từ điển. Cảm ơn mặc dù :) –

+0

Có điều gì tôi thiếu ở đây không? Tôi tạo ra các tập tin đạo cụ, nhưng NuGet thêm CodeAnalysisDictionary như là một loại 'Nội dung' khi nó phải là một loại' CodeAnalysisDictionary'. Tôi cung không chăc tại sao. Nó hoạt động tốt khi tôi sử dụng 'biên dịch' cho các tập tin cs của tôi mặc dù. –

+0

Đó là vì giao diện người dùng VS sử dụng các quy tắc khác nhau để quyết định loại nội dung hơn so với việc phân tích mã các tệp MSBuild làm. Mặc dù màn hình hiển thị giao diện bất thường, bạn sẽ thấy rằng từ điển của bạn đang được sử dụng bởi Phân tích mã. –

-2

Bạn cũng có thể làm điều đó bằng tay bằng cách sử dụng các bước sau.

  • dự án Nhấp chuột phải
  • Đến tính
  • Tới thả xuống [Chạy quy tắc thiết lập này]
  • Chọn [Duyệt ..] tùy chọn
  • Chọn ruleset công ty của bạn mà bạn có thể đặt tại vị trí được xác định trước trong mã nguồn.
  • Nhấp Mở trên cửa sổ Mở
  • Lưu tệp dự án.

Bạn có thể lặp lại bước này cho các dự án khác trong giải pháp.

+0

Đó là những gì chúng tôi đang làm hôm nay. Nhưng với hàng trăm dự án chúng tôi có, tổng số tiền lãng phí thời gian kết hợp với các lỗi của con người xảy ra theo thời gian. Một gói nuget sẽ thú vị hơn. –

1

Tôi gặp sự cố tương tự như được báo cáo trong nhận xét: từ điển đã được thêm làm nội dung chứ không phải là CodeAnalysisDictionary.

tôi đã thêm đoạn mã này trong install.ps1 của gói NuGet để giải quyết này:

$dictionary = $project.ProjectItems | Where-Object {$_.Name.EndsWith("CustomDictionary.xml")} 
$dictionary.Properties.Item("Buildaction").Value = [int]5; 
Các vấn đề liên quan