IntelliSense および SandCastle と互換性のあるドキュメントを、svcutil によって生成された WCF プロキシ クラスに追加しようとしています。生成されたコードを直接編集せずにこれを行う方法はありますか (再生成されると失われるため)。
5 に答える
WCFExtras プロジェクトでは、探している機能を見つけることができます。XML コード ドキュメントを取得して WSDL に埋め込む WSDL エクスポータおよびインポータ + それを取り出し、生成されたクライアント側プロキシに XML ドキュメントとして再度追加します。
WCFExtras は、http: //wcfextras.codeplex.com/ (または Nuget パッケージとして) にあります。
--larsw
限定的な解決策は、SvcUtil によって生成されたクラスを反映する部分クラスのみをドキュメント化することです。SvcUtil クラスは部分クラスとして作成されるため、これをクラスの文書化に利用できますが、メソッドやプロパティではうまくいかない可能性があります。IntelliSense はコメントを表示します。SandCastle もコメントをマージすると思いますが、まだ試していません。この方法を使用したい場合、これらのクラスをサービスの変更と同期させるのは面倒かもしれません。
ドキュメンテーション クラスは次のようになります。
/// <summary>
/// This is a comment
/// </summary>
public partial class YourSvcUtilGenerateClientClass { }
これらのクラスがテンプレートで生成される方法をオーバーライドできると思います。話題になっている記事へのリンクです。彼らは Silverlight に焦点を当てていますが、コード コンテキストはまだ適用可能だと思います。
個人的には、生成された WCF プロキシ クラスを使用したことはありません。独自のプロキシ クラスを作成するのは簡単すぎます。必要なのはこれだけです (プロキシ クラスに ServiceContract インターフェイスを追加すると、Visual Studio によってメソッドが追加されます)。
using System.ServiceModel;
namespace My.Namespace
{
public class MyServiceContractProxy : ClientBase<IMyServiceContract>, IMyServiceContract
{
public MyServiceContractProxy() { }
public MyServiceContractProxy(string endpointName) : base(endpointName) { }
#region IMyServiceContract Members
public int AddValues(int val1, int val2)
{
return Channel.AddValues(val1, val2);
}
#endregion
}
}
ServiceContract が変更されると、プロキシがインターフェイスと一致しなくなるため、コンパイル エラーがスローされますが、通常、プロキシ クラスの編集は 10 秒以内です。
XML コメント ルートではニーズが満たされないため、Document! X 2011製品が選択されます。無料ではありませんが、必要なことは何でもしてくれます。