2012-01-09 5 views
4

svcutilを使用して、参照された型をVisual Studioと同様に再利用/除外することは可能ですか?svcutil再アセンブリの除外/再利用

私のタイプ/データモデルは別々のアセンブリに格納されているので、他の非wcfプロジェクトなどでも使用できます。ビジュアルスタジオGUIでリフレッシュを更新すると、すべてうまくいきます。境界の両側に型がある限り、それはプロキシで定義されたbeeingから除外されます。

svcutilを使用して同じことを達成するにはどうすればよいですか?

もっと明確に私は、dirからservicecontractを含む実行中のサービスではなく、プロキシを生成したいと思います。同時に私は共有タイプを含むdllファイルをフィードしたいが、これはプロキシで定義されたbeeingから除外されるべきである。

この理由は、自分のプロジェクトをビルドサーバーで更新してビルドできるようにするためです。

編集: 最初にあなたの返信とパラメータの提案をありがとうございます。しかし、私はあなたの指示に従ってアセンブリを再利用することはありません。ここで

は私が生成するためのすべてのフラグを除外しまし作られた.batファイルの一部であるINotifyPropertyChangedのなど

SET BACKENDROOT=C:\SomePath\Development\Backend\bin 
SET DATAMODELSBASE=C:\SomePath\Development\DataModels\bin 
SET COMMONBASE=C:\SomePath\Development\Common\bin 

SET REFRENCED_ASSEMBLIES=/r:%DATAMODELSBASE%\Jall.DataModels.Consignment.dll 

svcutil %BACKENDROOT%\Jall.Backend.Consignment.DLL /t:metadata 
svcutil /o:test.cs %REFRENCED_ASSEMBLIES% *.wsdl *.xsd 

結果は次のようになります

[System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "4.0.30319.1")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.datacontract.org/2004/07/KSD.DataModels.Consignment")] 
public partial class ExtInvoice : OrmBase 
{ 

private System.DateTime buyersOrderDateField; 

private bool buyersOrderDateFieldSpecified; 

private string buyersOrderNumberField; 

private string compCodeField; 
..... 

をし、クライアントに自己:

public Address CreateNewAddress(int TK, string AddressType) 

これはdatamodelsがプロキシに直接生成されている間違っています。クライアントはそれらをスキップするだけでなく、型に適切な名前空間を使用します。正しい結果は次のようになります。

public Jall.DataModels.Consignment.Address CreateNewAddress(int TK, string AddressType) 

(名前は:) scrambeledされている)

Brgds、 スティアン

答えて

3

ありがとうございました。 は、次のコマンドを使用して、最終的にこの作業を手に入れた:

SET BACKENDROOT=C:\SomePath\Development\Backend\bin 
SET DATAMODELSBASE=C:\SomePath\Development\DataModels\bin 
SET OUTFOLDER=C:\SomeOutputFolder 
SET REFRENCED_ASSEMBLIES=/r:%DATAMODELSBASE%\Jall.DataModels.Consignment.dll 
SET REFRENCED_ASSEMBLIES=%REFRENCED_ASSEMBLIES% /r:%DATAMODELSBASE%\Jall.DataModels.SomethingElse.dll 

SET SVCFLAGS=/enableDataBinding /s /a /tcv:Version35 

::Generate metadata 
svcutil %BACKENDROOT%\Jall.Backend.Consignment.DLL /t:metadata -d:%OUTPUTFOLDER% 

::Generate proxy with shared types 
svcutil %OUTPUTFOLDER%\*.wsdl %OUTPUTFOLDER%\*.xsd %SVCFLAGS% /ser:DataContractSerializer %REFERENCED_ASSEMBLIES /o:test.cs 

ノート/ SERのこと:DataContractSerializerが動作するために、このために使用されなければなりませんでした。 さらに、データ型やデータセットなどの型を使用すると(実際にはそうではないにしても)アセンブリを組み込む必要があるか、svcutilがメタデータの生成を混乱させることになります。

IE:

SET SHAREDASSEMBLIES=%SHAREDASSEMBLIES% /r:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll 
3
svcutil /? 

ので0を実行している
/reference:<file path> - Add the specified assembly to the set of assemblies 
         used for resolving type references. If you are 
         exporting or validating a service that uses 3rd-party 
         extensions (Behaviors, Bindings and BindingElements) 
         registered in config use this option to locate 
         extension assemblies that are not in the GAC. 
         (Short Form: /r) 

を与えますを/r:myassembly.dllとするとよいでしょう。

1

引数なしでsvcutilを実行すると、いくつかの機能があることがわかります。

  • バイナリからメタデータを生成するには、svcutil /serviceName:<myServiceName> <pathToAssemblyWithConfigFile>のようなコマンドラインを使用します。これにより、.wsdlファイルと.xsdファイルが出力されます。
  • メタデータからコードを生成する別の方法として、スイッチでデータコントラクトの既存のタイプを見つける場所を指定する:svcutil /reference:<assemblyPath> *.wsdl *.xsd

私は前にこの手順を試しましたが、svcutilが「コード生成」モードのときは、アセンブリではなく入力としてメタデータが必要です。最初にメタデータを生成してください!

+0

こんにちはご回答ありがとうございました。指定されたコマンドでutilを実行すると、正しい名前空間からそれらを参照するのではなく、プロキシで部分クラスが生成されます。 –

+0

2番目(コード生成)で 'reference'スイッチを指定するだけでなく、' excludeType'も指定すればどうなりますか?例: 'svcutil/reference: /excludeType:name.space.type1 /et:name.space.type2 * .wsdl * .xsd'です。 – shambulator

+0

良い服用!しかし、私はまったく同じ結果を得ています。 –