2

SvcUtils.exe の奇妙な動作を確認しました。

そこに /reference パラメータを渡すと、何らかの理由で *.cs ファイルが生成されません。

C:\test>"C:\Program Files\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\SvcUtil.exe" /t:code http://localhost/Api/Common.svc /r:Api.dll
Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation, Version 4.0.30319.17929]
Copyright (c) Microsoft Corporation.  All rights reserved.

Attempting to download metadata from 'http://localhost/Api/Common.svc' using WS-Metadata Exchange or DISCO.
Generating files...
C:\test\output.config

同時に、パラメーターを削除すると、正常に生成されます。

C:\test>"C:\Program Files\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\SvcUtil.exe" /t:code http://localhost/Api/Common.svc
Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation, Version 4.0.30319.17929]
Copyright (c) Microsoft Corporation.  All rights reserved.

Attempting to download metadata from 'http://localhost/Api/Common.svc' using WS-Metadata Exchange or DISCO.
Generating files...
C:\test\CommonService.cs
C:\test\output.config    

なんで?Api.svc で使用される Api.dll からクラスを取得して、CommonService.cs で生成するにはどうすればよいですか?

アップデート。私には明らかであるが、それでもなお重要であると思われるいくつかの詳細を追加させてください。Api.dll アセンブリには、[DataContract]属性でマークされたクラスと、 [DataMember]属性でマークされたプロパティが含まれています。これらのクラスは、Api.svc で表示されるメソッドから返されます。私の目標は、生成されたプロキシ コードで Api.dll のクラスを再利用することです。

この動作がおかしいと思うのはなぜですか? 通常は再利用せずにサービスのプロキシ クラスを生成しますが、/r パラメータを追加してクラスを再利用すると、コードの生成がまったく拒否されます。問題は、何が間違っているのかということです。この動作を得るために何が間違っている可能性があり、目標を達成するためにそれを正しく行うにはどうすればよいでしょうか?

UPD2. 最も奇妙なのは、チェックされた「再利用」オプションを使用してVisual Studioから参照を更新すると、完全に機能することです。

4

1 に答える 1

2

私は同じ問題に遭遇しました。Visual Studio で WCF リファレンスのコードを作成できないというエラーが表示され、それ以上の情報が得られなかったため、実際には svcutil を使用していました。最終的に VS で警告を有効にすると、より多くの情報が得られました。それ自体が WCF サービスを参照するアセンブリを参照していたことが判明しました。そのため、特定のタイプは 2 回含まれています。その後、型のマッピングは失敗します。私がしたことは、どのアセンブリが参照されるかを構成することでした。そのため、WCF サービスと標準の .NET システム アセンブリのみを選択しました。また、データ コントラクトの生成を無効にし (それを試すためだけに有効にしました)、ビルドすることができました。

簡単に言えば、使用したい型が一度だけ参照されるようにしてください。

于 2013-04-03T12:57:56.637 に答える