Web リファレンス内で CLS 準拠を処理するにはどうすればよいですか?
-
16-09-2019 - |
質問
[アセンブリ:System.CLSCompliant(true)] C# ソリューションのアセンブリ内にあります。
SharePoint Web サービス用に生成されたコード内でいくつかの警告が表示されます。
CLS に準拠していないメソッドの 1 つを次に示します。
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://schemas.microsoft.com/sharepoint/soap/GetItem", RequestNamespace="http://schemas.microsoft.com/sharepoint/soap/", ResponseNamespace="http://schemas.microsoft.com/sharepoint/soap/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public uint GetItem(string Url, out FieldInformation[] Fields, [System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")] out byte[] Stream) {
object[] results = this.Invoke("GetItem", new object[] {
Url});
Fields = ((FieldInformation[])(results[1]));
Stream = ((byte[])(results[2]));
return ((uint)(results[0]));
}
この警告を削除するにはどうすればよいですか?
ありがとう、キース
解決
私はあなたがCLSに準拠するように設定されていない別のクラスライブラリプロジェクトであなたのウェブ参照を置くお勧めします。あなたのメインのコードからそのライブラリを参照します。
他のヒント
非準拠メソッドをマークするには、 [CLSCompliant(false)]
属性を使用して警告を回避しますが、それはそもそもアセンブリを準拠としてマークするという目的を無効にしているようです。おそらく、コードを実際に CLS に準拠させたいと考えられます。
コードを準拠させるには、メソッドの戻り値の型を次から変更する必要があります。 uint
/UInt32
. 。公開された署名なし型は CLS に準拠していません。
戻ってもいいよ long
/Int64
その代わり。の long
タイプは CLS に準拠しており、可能なあらゆるものを安全に処理します。 uint
価値。
生成されたコードを編集できない (属性を追加するか戻り値の型を変更する) ことができない場合、または編集するつもりはない場合、唯一の選択肢は、そのコードを別の非準拠アセンブリに移動することだと思います。 ジョンが示唆するように.
所属していません StackOverflow