4

似ています:メタデータを変更できないことを除いて、メンバー名を囲んでいるタイプと同じにすることはできません。クラスを完全に無視したいだけです。

Visual Studio 2010でサービス参照を追加しようとしていますが、次のエラーが発生します。

カスタムツール「DataServiceClientGenerator」が失敗しました。データサービスクライアントのコード生成に失敗しました:指定されたスキーマが無効です。エラー:(0,0):エラー0042:名前fooはタイプMicrosoft.Crm.Sdk.Data.Services.fooでは使用できません。メンバー名は、それらを囲むタイプと同じにすることはできません。

このエラーは、誰かがfooオブジェクトのフィールドに名前を付けたことが原因であると理解していますfooが、それを変更することはできません。

したがって、CRM内で変更を加えることができずに、サービス参照を生成するにはどうすればよいですか?

をダウンロードして$metadata、問題のあるタイプを削除してから保存することを考えました(タイプはとにかく使用するタイプではないため)。しかし、それはあまり単純ではないので、これを機能させる方法がわかりません。

私はC#とVB.NETの両方でサービス参照を作成しようとしましたが、どちらも機能しませんでした。理想的には両方で機能するソリューションですが、現時点では、これらの1つでのみ機能するソリューションを利用できます。

4

2 に答える 2

6

私はこの問題を解決する方法を考え出しました。

http://localhost/myWcfDataService.svc/$metadata

この結果を次のようなディスクに保存しますc:\metadata.csdl

次に、ファイルを手動で編集し、問題のあるフィールドを削除(または名前変更)します(これにより、サービスで使用できなくなりますが、サービス全体が機能しないよりはましです)。

次に、以下を実行します。

c:\Windows\Microsoft.NET\Framework\v4.0.30319\DataSvcUtil.exe /language:CSharp /in:c:\metadata.csdl /out:c:\serviceReference1.cs

次に、新しく生成されたserviceReference1.csファイルをVisual Studioプロジェクトに追加し、これから継承するクラスがSystem.Data.Services.Client.DataServiceContextサービスのエントリポイントであることを確認します。

詳細については、こちらをご覧ください

于 2012-05-23T12:42:02.220 に答える
0

Sephのおかげで、単純な.csファイルではなく、実際の参照を追加するための改善された方法を思いつきました。

  • http://localhost/myWcfDataService.svc/$metadataファイルとして保存します。例:myService.csdl
  • names cannot be the same as their enclosing type手動で解決するように編集します。これは、クラスに同じ名前のフィールドがある場合に発生します。クラスの名前を変更することにしました。から。foo_ foo_代わりにフィールドの名前を変更できます。定期的に実行c:\Windows\Microsoft.NET\Framework\v4.0.30319\DataSvcUtil.exe /language:CSharp /in:myService.csdl /out:serviceReference1.csして、すべてのエラーがいつ解消されたかを確認します。
  • 名前を変更myService.csdlします$metadata
  • ファイルと同じフォルダで一時的にWebサーバーを実行し$metadataます。たとえば、Python 3をインストールして、が存在python -m http.serverするフォルダーから実行しただけ$metadataです。
  • 通常どおりVisualStudioにサービス参照を追加しますが、一時的なWebサーバーアドレスを使用します。私の場合はでしたhttp://localhost:8000。Visual Studioは、すべてを要求/$metadataして生成します。
于 2017-12-07T09:11:16.127 に答える