0

デスクトップ上のVS2010で問題なく構築できる、大規模なSilverlight、WCFRIAベースのソリューションがあります。ただし、TFSサーバーでは、次のように表示されます。

ViewModels\MyVM.cs (47): The type 'TestService.Web.SystemAccount' exists in both
'd:\Builds\1\MyProduct\Binaries\Silverlight\TestService.dll' and 'd:\Builds\1\MyProduct
\Binaries\Silverlight\CommonService.dll' 

.. と ...

Generated_Code\TestService.Web.g.cs (37476): The type 'TestService.Web.GroupToRule' in
'd:\Builds\1\MyProduct\Sources\Source\UI\TestService\Generated_Code\TestService.Web.g.cs' 
conflicts with the imported type 'CommonService.GroupToRule' in 'd:\Builds\1\MyProduct
\Binaries\silverlight\CommonService.dll'. Using the type defined in 'd:\Builds\1\MyProduct
\Sources\Source\UI\CommonService\Generated_Code\CommonService.Web.g.cs'.

開発者が週末にチェックインするまで、すべてが幸せでした(残念ながら非常に大規模なチェックイン)。チェンジセットで何が変わったかを見てきましたが、何も見つかりませんでした。

この質問ここで説明したものと同様のアプローチを使用しています。これにより、RIAコード生成プロセスで発生する可能性のある循環参照を回避するためのプレビルドソリューションが得られます。

私たちの疑いは、ビルドの順序が変更されてこれをチェックしているということですが、誰かがこれに対するいくつかの診断手順または解決策を提案できますか?

4

2 に答える 2

0

与えられた情報に基づいて合理的なことを言うのは難しいです。

いくつかの変更セットの前にすべてが正常にビルドされたことが確実な場合は、その「良い」リビジョンとそれ以降の「悪い」リビジョンのクリーンビルドのログを取得して比較できます。優れた差分ツールがこのタスクに役立つ場合があります。また、MSBuildログは非常に冗長である可能性があるため、おそらく手書きの分析ツールが必要になる場合があります。

また、あなたが参照したトピックでこの答えをチェックしてください。MSBuildチームの人がブログの1つで同じことを提案したので、そのアドバイスは公式のアドバイスと考えることができます。

于 2012-04-17T04:10:26.117 に答える
0

根本的な原因を解決しました(少なくとも、TFS上のMSBuildでコンパイルされるようになりました)。

WCFRIAドメインサービスインスタンスを作成するための独自のDomainServiceFactoryがあります。このファクトリ内で、現在の認証済みユーザーにカスタムオブジェクトを挿入します(ユーザーがログインしていて、ドメインサービスに認証済みユーザーが必要であると想定しています)。さらに、他のサービスが利用する共通のドメインサービスがあります。

シーンを設定します。

この混乱の原因は、認証されたユーザーを表すために使用するカスタムオブジェクトのようです。どういうわけか、このオブジェクトが共通ドメインサービスと共通ドメインサービスを参照している他のドメインサービスから見られているというコンパイルの状況に到達しました。

解決策は、サービスロケーターを使用して、共通ドメインをそれを必要とするサービスから分離することでした。

于 2012-04-19T15:23:34.930 に答える