Web リファレンス内で CLS 準拠を処理するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1140716

  •  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 価値。

生成されたコードを編集できない (属性を追加するか戻り値の型を変更する) ことができない場合、または編集するつもりはない場合、唯一の選択肢は、そのコードを別の非準拠アセンブリに移動することだと思います。 ジョンが示唆するように.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top