5

次のように、SvcUtil.exe を使用して WCF コードを生成しています。

SvcUtil.exe http://www.MyServer.com:8080/MyService/mex /out:"C:\test.cs" /mc

動作させることはできますが、add a /namespaceargument( ) を設定すると、生成されたインターフェイスの生成された値が/namespace:*,MyNamespace上書きされます。ConfigurationNameServiceContractAttribute

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="MyNamespace.MyServiceName")]
public interface MyServiceName
{ ... }

名前空間を設定しない場合、値ConfigurationNameは正しい "MyServiceName" になります ("MyNamespace.MyServiceName" は正しくなく、機能しません)。/ServiceName:MyService 引数を追加しようとしましたが、次のように表示されます

エラー: /serviceName: オプションが他のオプションと競合しています。ツールの使用状況を確認します。

ConfigurationName を上書きせずに、生成されたクラスの名前空間を指定するにはどうすればよいですか?

4

2 に答える 2

8

私は同じ問題を抱えています。VisualStudio.NET 2010 で追加されたときに生成された ConfigurationName="MyWebService.MyWebServiceSoap" を持つ ServiceReference があります。名前空間用。/n 属性を次のように設定すると、次のようになります。

/n:*,MyApplication.MyWebService.MyWebServiceSoap

生成したクラスの適切な名前空間を取得しましたが、ConfigurationName も MyApplication.MyWebService.MyWebServiceSoap に設定されています。

これは、VS.NET が svcutil を使用していないことを示しているようであり、これを示していると思われる投稿も見つかりました。

もっと良い答えがあればいいのにと思いますが、MSBuild の svcutil を使用しているため、svcutil に正しくない ConfigurationName のクラスを生成させ、FileUpdate タスクを使用して正規表現を使用してその名前を変更することでした。繰り返しますが、これは理想とはかけ離れていますが、svcutil のドキュメントには、ConfigurationName を指定できるものは何もありません。

また、serviceName オプションは、コンパイルされたコードからメタデータをエクスポートするために使用されます。これは、クライアント プロキシ クラスの生成には有効ではありません。これがおそらく、serviceName オプションの競合エラーが発生した理由です。

参照: http://msdn.microsoft.com/en-us/library/aa347733.aspx

于 2011-02-03T20:33:21.770 に答える