2009-06-02 24 views
5

Tôi có dự án .NET 3.5 C# có không gian tên là SampleNamespace.Tools.Sample.Trường hợp Tên tham chiếu không phải là CLS Tuân thủ

Nếu tôi thêm một hội đồng gọi là "Samplenamespace.Utils.Example" để dự án của tôi tôi nhận được cảnh báo sau đây:

định danh 'Samplenamespace' chỉ khác nhau trong trường hợp không phải là CLS-compliant

Lưu ý chữ thường 'n' trong Samplenamespace.

Tôi thậm chí không sử dụng bộ tham chiếu trong dự án của tôi vào lúc này. Chỉ cần thêm nó làm tham chiếu sẽ gây ra cảnh báo.

Tại sao trình biên dịch phàn nàn về điều này khi tôi không tiết lộ bất kỳ tham chiếu nào đến hội đồng trong các lớp học công khai của tôi?

Bất kỳ giải pháp nào khác?

Trả lời

7

Không phải tất cả các ngôn ngữ .NET là trường hợp nhạy cảm (VB ví dụ) khi bạn đã trộn không gian tên như thế này, diffing chỉ trong trường hợp (sử dụng từ ngữ của cảnh báo) mã của bạn có thể không thể truy cập tới các nhà phát triển khác.

Đó có thể không phải trường hợp của bạn, đó là lý do tại sao nó là một cảnh báo (mà trong cửa hàng của tôi chúng ta đối xử như một lỗi)

+0

Cảm ơn Ralph, tôi vẫn không hiểu tại sao điều này lại quan trọng vì dự án của tôi không phơi bày bất cứ điều gì tạo thành hội đồng tham chiếu cho bất kỳ khách hàng VB tiềm năng nào. Tôi có hiệu quả trừu tượng các khách hàng VB từ hội đồng cơ bản? – user115909

+0

Vì VB không phân biệt chữ hoa chữ thường, nó không thể phân biệt giữa SampleNamespace.A và Samplenamespace.A và do đó nó không thể xác định kiểu cần gọi. Để ngăn chặn sự mơ hồ như vậy, C# Compiler gắn cờ điều này để bạn chỉ có thể tạo các kiểu và các thành viên có thể được gọi bởi tất cả mọi người mà không có bất kỳ sự mơ hồ nào. – Gishu

+0

Tôi nghĩ rằng, Đó là một lá cờ và kiểm tra mù, nó không phải là xem xét cách bạn đang thực sự sử dụng hoặc phơi bày các loại. – Gishu

2

Nó chỉ đơn giản là cảnh báo cho bạn vì không phải tất cả các ngôn ngữ mà có thể tiêu thụ các loại trong giải pháp của bạn sẽ nhận thức được sự khác biệt (và có thể không sử dụng được các loại).

Tôi nghĩ rằng bạn có thể tránh được cảnh báo này bằng cách đánh dấu lắp ráp của bạn như là phi CLS phù hợp (trong tập tin AssemblyInfo.cs) (read more here):

[assembly:CLSCompliant(false)] 

Không chắc tôi nghĩ rằng đó là một ý tưởng tốt mặc dù ...

Cập nhật: Tôi cho rằng lý do cảnh báo được đưa ra mặc dù không có gì được hiển thị công khai là không gian tên không có công cụ sửa đổi truy cập. Bạn có thể nói rằng không gian tên luôn công khai, do đó, được tiếp xúc với khách hàng tiềm năng, mặc dù chúng có thể không chứa bất kỳ loại công khai nào.

+0

Fredrik, tôi có thể làm cho mã không CLS-Compliant nhưng tôi không muốn xem xét bất kỳ mã khách hàng của ứng dụng của tôi không được tiếp xúc với hội đồng này. Nó không có vẻ giống như một tình huống hợp lệ để phá vỡ CLS-Tuân thủ. – user115909

+0

Tôi cũng tò mò và làm một số thử nghiệm; xem cập nhật của tôi trong câu trả lời. –

+0

Điều đó làm từ Fredrik. Tôi cho rằng các tùy chọn duy nhất của tôi là thay đổi không gian tên hoặc đặt CLS tuân thủ sai. Cảm ơn vì đã giúp bạn – user115909

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