ここ数日、私は本当に奇妙な問題に直面しています。私はそれを克服するために最善を尽くしましたが、あまりにも抽象的であるため、どこを見ればよいかさえわかりません。ここ、SO、およびGoogleが見つけた他の多くのサイトで、関連するすべてのスレッドを読みました。ケースはかなり複雑ですが、ご容赦ください。
私は、WCF Web サービスを使用してバックエンド インフラストラクチャと通信する MVC Web ポータル フロントエンドを持つプロジェクトに取り組んでいます。一部は私たちが作成し、一部は WWF サービスです。すべてのサービスは単純な http バインディングを使用しています。サービスの契約を変更する必要があるタスクを与えられたため、サービス参照を更新しました。更新に失敗し、次の一連の警告/エラーが表示されました:
Warning 43 Custom tool warning: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information. PathToProject\Reference.svcmap 1 1 PortalProjectName
Warning 44 Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
XPath to Error Source: //wsdl:definitions[@targetNamespace='namespaceDeclaredInService']/wsdl:portType[@name='IEntityListService'] PathToProject\Reference.svcmap 1 1 PortalProjectName
Warning 45 Custom tool warning: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.
XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='namespaceDeclaredInService']/wsdl:portType[@name='IEntityListService']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='WSHttpBinding_IEntityListService'] PathToProject\Reference.svcmap 1 1 PortalProjectName
Warning 46 Custom tool warning: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on.
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='WSHttpBinding_IEntityListService']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:service[@name='EntityListService']/wsdl:port[@name='WSHttpBinding_IEntityListService'] PathToProject\Reference.svcmap 1 1 PortalProjectName
Error 47 Custom tool error: Failed to generate code for the service reference 'EntityListService'. Please check other error and warning messages for details. PathToProject\Reference.svcmap 1 1 PortalProjectName
これは、参照されたアセンブリの型を Web サービスで再利用しないようにすることで解決できることがわかりました。私はそれを行いましたが、(ofc)コード内にあいまいな型参照があることがわかりました。とにかく、参照されたアセンブリから型を再利用することはまさに私が望むものであるため、このソリューションはテスト目的のためだけに行いました。それで、再利用のチェックボックスをチェックして、実験を始めました。
ポータル プロジェクトから、問題の原因となったすべての参照 (そこから型を再利用する必要があります) を削除しました。次に、これは、同じソリューションの一部であるこれらのアセンブリのいずれかに隠されたエラーと関係がある可能性があることがわかりました。そこで、これらのプロジェクトの 1 つを構築し、それを Portal から dll として参照して、この仮説をテストしました。すべて同じです。
次に、さらに調査したところ、再利用したいタイプのアセンブリへの参照を削除し、ポータルからプロジェクト「リソース」への参照を追加したときにもこのエラーが発生することがわかりました (このプロジェクトのタイプはポータルまたはウェブサービス)。リソースには、1 つのクラス (属性) と 1 つのリソース ファイル (cs+resx) が含まれていました。そのため、リソースへの参照が追加された Portal プロジェクトがあり、最初にエラーを引き起こしたプロジェクトへの参照はなく、エラーは引き続き発生します。次に、リソース プロジェクトのリソース ファイルのアクセス修飾子が Public に設定されていることを確認しました。内部に切り替えたところ、サービス参照が正常に更新されました。問題は、他のプロジェクトがこれらのリソースを使用するため、これを公開したままにしておく必要があることです。これには、サービスを再利用したいこれらの含まれるタイプが含まれます。
この件についてグーグルで調べていると、これらが役立つと言っている人を見つけました:
- VSを再起動します
- 管理者権限なしで VS を実行する
- VS 2012 RC のアンインストールと VS2010 の再インストール
- 参照を最初から削除して追加し、これらのステップの間に VS を再起動します
私の場合、これらの解決策はどちらも役に立ちませんでした。
私の観点からは、それは非常に奇妙です。今のところ、この問題の解決策がないため、どんな助けも大歓迎です。
編集:
リソース プロジェクトでは、プロキシ クラスを作成し、実際のリソースを内部に作成しました。これにより、ビルドが可能になり、ポータルがリソース プロジェクトのみを参照した場合に更新参照が機能しました。プロジェクトから他のアセンブリへの参照を追加した後は、すべて同じです。