2 つのサービスを公開する WCF プロジェクトがあります。サービスをローカルでビルドすると、正常に動作します。TFS ビルドがアセンブリを作成するときに、サービスの 1 つが機能しません。クライアント アプリケーションは、サービスが呼び出される前に、「インデックスが配列の範囲外でした」という例外をスローします。
新しいワークフロー プロセスではなく、移行された MSBuild ベースのプロジェクトに対して TFS2010 を使用しています。
TFS でビルドされた DLL をマシンのリリース ビルド バージョンに置き換えると、サービスが機能し始めます。TFS ビルド バージョンの DLL を自分のマシンに配置すると、ローカル サービスが失敗し始めます。
私がチェックしたこと:
- すべてのプロジェクトはリリースをビルドするように設定されています | 任意の CPU
- 両方のマシンに VS2010 SP1 がインストールされています
- 2 つの DLL を逆アセンブルすると、同じコードが含まれていることがわかります
少し心配です。私のマシンは Windows 7 x64 で、ビルド マシンは Windows Server 2003 x86 です。ただし、Any CPU は、ビルド プロセス中にこれが問題にならないことを意味すると推測しました。
この問題を調査するための他のアプローチの提案はありますか?
クライアントからのスタック トレースには以下が含まれます。
System.ServiceModel.FaultException 1[System.ServiceModel.ExceptionDetail]: Index was outside the bounds of the array. (Fault Detail is equal to An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at Microsoft.CSharp.RuntimeBinder.ExpressionTreeCallRewriter.GetMethodInfoFromExpr(EXPRMETHODINFO methinfo)
at Microsoft.CSharp.RuntimeBinder.ExpressionTreeCallRewriter.GenerateCall(EXPRCALL pExpr)
at Microsoft.CSharp.RuntimeBinder.ExpressionTreeCallRewriter.VisitCALL(EXPRCALL pExpr)
at Microsoft.CSharp.RuntimeBinder.Semantics.ExprVisitorBase.Dispatch(EXPR pExpr)
at Microsoft.CSharp.RuntimeBinder.Semantics.ExprVisitorBase.Visit(EXPR pExpr)
at Microsoft.CSharp.RuntimeBinder.ExpressionTreeCallRewriter.GenerateLambda(EXPRCALL pExpr)
at Microsoft.CSharp.RuntimeBinder.ExpressionTreeCallRewriter.VisitCALL(EXPRCALL pExpr)
at Microsoft.CSharp.RuntimeBinder.Semantics.ExprVisitorBase.Dispatch(EXPR pExpr)
at Microsoft.CSharp.RuntimeBinder.Semantics.ExprVisitorBase.Visit(EXPR pExpr)
at Microsoft.CSharp.RuntimeBinder...