2010-06-18 22 views
5

Tôi thích tuân theo quy tắc định dạng StyleCop để làm cho đẹp mã và rõ ràng, nhưng gần đây tôi đã có một vấn đề với một trong những cảnh báo của nó:Sử dụng chỉ thị, không gian tên và tham chiếu hội - tất cả đều lộn xộn với StyleCop!

Tất cả các chỉ thị sử dụng phải được đặt bên trong namespace.

Vấn đề của tôi là tôi có sử dụng chỉ thị, một tài liệu tham khảo lắp ráp (đối với chế giễu xóa tập tin), và một không gian tên để sắp xếp vào một trong các lớp học thử nghiệm của tôi:

using System; 
using System.IO; 
using Microsoft.Moles.Framework; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
[assembly: MoledType(typeof(System.IO.File))] 

namespace MyNamespace 
{ 
//Some Code 
} 

Trên đây cho phép thử nghiệm này là chạy tốt - nhưng StyleCop phàn nàn về các chỉ thị sử dụng không nằm trong không gian tên.

Đưa các sử dụng bên trong không gian tên cung cấp lỗi mà "MoledType" không được nhận dạng.

Đưa cả usings và tài liệu tham khảo lắp ráp bên trong namespace cung cấp cho các lỗi

'lắp ráp' không phải là một thuộc tính địa điểm hợp lệ cho tuyên bố này. Các vị trí thuộc tính hợp lệ cho tuyên bố này là 'loại'. Tất cả các thuộc tính trong khối này sẽ bị bỏ qua.

Có vẻ như tôi đã thử mọi bố cục tôi có thể nhưng không có kết quả - giải pháp sẽ không được xây dựng, việc nhại sẽ không hoạt động hoặc StyleCop than phiền!

Có ai biết cách thiết lập chúng để mọi thứ đều vui không? Hoặc tôi sẽ phải bỏ qua cảnh báo StyleCop trong trường hợp này?

+1

Nếu bạn đặt tên hoàn toàn đủ điều kiện cho MoledType và chỉ di chuyển các thông tin vào tên không trùng lặp thì nó vẫn còn comaplain? –

+0

Yup đã sửa nó! Tôi nhận được bình luận này ngay sau khi tôi gửi câu trả lời cho câu hỏi của tôi haha!Cảm ơn mặc dù Leom, nhiều đánh giá cao =) – Jack

Trả lời

10

Giải quyết hai phút sau!

Tôi chỉ cần thiết để đưa đường dẫn đầy đủ của "MoledType" trong tài liệu tham khảo lắp ráp - có nghĩa là tôi có thể để nó ở ngoài không gian tên với các chỉ thị sử dụng bên trong như vậy:

[assembly: Microsoft.Moles.Framework.MoledType(typeof(System.IO.File))] 
namespace MyNamespace 
{ 
using System; 
using System.IO; 
using Microsoft.Moles.Framework; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 

// Some Code... 
} 

Hy vọng rằng someone'll tìm điều này hữu ích!

+2

Cũng giống như bình luận của tôi nói :) –

+0

Haha bạn không thể dạy thời gian như thế =) – Jack

+0

Công việc tốt này đã phá hủy thời gian lớn của tôi! Chỉ cần bắt đầu sử dụng StyleCop và vẫn đang điều chỉnh theo ý kiến ​​của nó về những điều này –

5

Mẫu điển hình sẽ là đặt tất cả các thuộc tính cấp hội của bạn trong tệp AssemblyInfo.cs. Thông thường, tệp này không có bất kỳ phần tử không gian tên nào và tất cả các thuộc tính assembly được định nghĩa bằng cách sử dụng các tên đầy đủ.

1

Đồng ý với Jason, bạn nên đặt điều này trong AssemblyInfo.cs thay thế (Project -> Properties).

Nhưng! Hãy cẩn thận với những gì bạn đưa vào tệp AssemblyInfo.cs. Giả sử bạn muốn sử dụng:

[assembly: InternalsVisibleTo("ClassA")] 

Nếu bạn đặt điều này trong AssemblyInfo.cs, TẤT CẢ các lớp nội bộ của dự án sẽ hiển thị với ClassA. Điều này không phải lúc nào cũng muốn.

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