2012-07-17 4 views
5

私は、私たちの会社内で広く使用されるWCFサービスを作成しています。ビルドプロセスの一環としてWCFクライアントプロキシを生成し、サービスのクライアントがこのプロセスを何度も繰り返す必要がないようにアセンブリを作成します。誰もがこれを達成するために知っている方法はありますか? MSBuildの既存ビルドタスクはありますか?ビルドプロセスの一部としてWCFプロキシを生成する

答えて

3

などのプロジェクトは、ここで私がやって巻き取るものです:

1)私は、クライアントコード

を生成するサービスを持ってプロジェクトを作成します。

a) Takes the compiled WCF Service assembly, runs svcutil.exe on it to extract XSD and WSDL metadata for all the services in the Service assembly. 

b) Runs svcutil.exe again, this time on the extracted XSD and WSDL files to generate a .cs file containing the client 

c) Run csc.exe to compile the generated client code into a separate assembly. 

3)「AfterBuild」ターゲットにのMSBuildタスクを挿入します2)次のことを行いのMSBuildタスクを作成します。サービスを含むプロジェクトの

サービスをビルドするたびに、複数のプロジェクトで同じWeb参照を再生成/生成することなく、複数の他のプロジェクトが参照できるクライアントコードを含むアセンブリが自動的に生成されます。 Web参照ジェネレータで生成された複数のファイルではなく、プロジェクトファイル内の1行を更新するだけで、単一のアセンブリを参照してより簡単に更新できます。興味があれば、MSBuildタスクのコードとXMLスニペットを使用してそれらのコードを送信できます。

+0

このソリューションのコードを投稿できますか?私がやっていることはまさにそのことです。下の記事のように、私はバッチファイルを使用していて、停止したい。 – Jonathan

+0

@aloncatzは、MSBuildで必要なコマンドを実行するためのおおよそのアイデアを持っています。上記の解決策を実行した後で、さらにいくつかのステップを踏んで、アセンブリをナゲットパッケージにコンパイルして、ナゲットパッケージを社内のナゲットサーバーに公開します。 –

0

私は任意の組み込みのタスクを認識していないよ、これは私がそれを行う方法です。

は、プロジェクトを作成し、svcutilを経由してプロキシクラスを生成し、プロジェクトに追加します。 (1)svcutilを呼び出して上のクラスを上書きし、(2)プロジェクトをビルドするMSBuildスクリプトを作成します。

あなたが望むものは得られませんか?

-1

T4テンプレートを見て、そのようT4Toolbox

-1

単に別のクラスライブラリプロジェクトを作成するだけではいかがですか。そのプロジェクトでは、必要なサービスごとに「サービス参照の追加」を使用します。

他のコードでは、単にクラスライブラリのクラスを使用できます。

+1

これは信じられないほどマニュアルなので、プロジェクトとしてこのようにして、クライアントアセンブリを自動的に生成させることができます。何も保守する必要はなく、人々はプロジェクトを見つけてコンパイルする必要はありません。 –

+0

最初に参照を作成する場合を除いて、どのように手動ですか?サービスが変更されたときにのみ更新する必要があります。次に、作成した他のライブラリコードと同じ方法で、そのプロジェクトの出力を処理します。 –

0

作成したMSBuildのアプローチは、達成したいもの(現在はバッチファイルを使用しています)を正確ににします。 MSBuildタスクとXMLスニペットを投稿/送信してください!

3

私は同じ問題を解決しようとしていました。ここで終わったことがあります。 .csprojのAfterBuildターゲットで、SDKパスをフェッチするタスクを追加し、Execコマンドを使用してsvcutil.exeを実行します。私は&を使っていました。パスにスペースが含まれているためです。

<Target Name="AfterBuild"> 
    <GetFrameworkSdkPath> 
     <Output TaskParameter="Path" PropertyName="SdkPath"/> 
    </GetFrameworkSdkPath> 
    <Exec Command="&quot;$(SdkPath)bin\NETFX 4.5.1 Tools\svcutil.exe&quot; $(TargetPath)"/> 
</Target> 
関連する問題