2010-08-13 5 views

Antwort

41

In Ihrem AssemblyInfo.cs-Datei, Sie haben wahrscheinlich eine Linie, die

[assembly:CLSCompliant(true)] 

liest Wenn Sie das tun, dann werden die folgenden Regeln eingehalten werden müssen. (Copy-Pasta aus http://www.devarticles.com/c/a/C-Sharp/Making-Your-Code-CLS-Compliant/)

  1. Unsigned Typen sollten nicht Teil der öffentlichen Schnittstelle der Klasse sein. Dies bedeutet, dass öffentliche Felder keine vorzeichenlosen Typen wie uint oder ulong aufweisen dürfen. Öffentliche Methoden sollten keine vorzeichenlosen Typen zurückgeben. An die öffentliche Funktion übergebene Parameter sollten keine vorzeichenlosen Typen aufweisen. Nicht vorzeichenbehaftete Typen können jedoch zu privaten Mitgliedern gehören.

  2. Unsichere Typen wie Zeiger sollten nicht mit öffentlichen Mitgliedern verwendet werden. Sie können jedoch mit privaten Mitgliedern verwendet werden.

  3. Klassennamen und Elementnamen sollten sich nicht nur in ihrem Fall unterscheiden. Zum Beispiel können wir nicht zwei Methoden namens MyMethod und MYMETHOD haben.

  4. Nur Eigenschaften und Methoden können überlastet sein, Operatoren sollten nicht überlastet werden.

+0

Nicht signierte Typen können Teil einer öffentlichen Schnittstelle sein, wenn sie keine Funktionalität offen legen, die in einer Sprache ohne unsignierte Typen geschrieben wurde, die möglicherweise verwendet werden, jedoch nicht in der Lage sind.Beispielsweise könnte eine Methode zum Speichern eines 32-Bit-Werts ohne Vorzeichen in vier aufeinanderfolgenden Bytes legitim Überladungen sowohl für "UInt32" als auch für "Int64" enthalten, und eine Klasse könnte auch eine Methode zum Konvertieren von vier aufeinanderfolgenden Bytes in "UInt32" bereitstellen vorausgesetzt, dass einer den gleichen Wert wie ein "Int64" zurückgibt. – supercat

5

Dies ist eine alte Frage, aber ich dachte, dass eine bessere Erklärung für zukünftige Ermittler (wie mich) fällig ist.

Zunächst einmal geben die Links in den anderen Antworten sehr detailliert Auskunft darüber, warum diese Warnung gegeben wurde.

Zusammengefasst, Code für die Common Language Runtime geschrieben (wie C#) ist CLS-kompatibel, wenn es mit anderen Sprachen für die CLR Schnittstelle kann. Dies bedeutet, dass bestimmte für die Sprache spezifische Datentypen, die nicht für die gesamte Laufzeit gelten, nicht kompatibel sind. Die schnelle und einfache Lösung für Variablen und Methoden besteht darin, ihnen den Sichtbarkeitsmodifikator internal zu geben, der angibt, dass die Methode, Klasse, Eigenschaft usw. außerhalb der Assembly, für die sie erstellt wird, nicht sichtbar ist. Dies sollte nur für die Elemente erfolgen, die Sie außerhalb der Baugruppe nicht benötigen oder verwenden möchten. Für diejenigen, die sichtbar sein sollen, verwenden Sie CLS-konforme Datentypen.

Verwandte Themen