Wcf 本地生成v TFSBuild问题。。。有什么想法吗?

Wcf 本地生成v TFSBuild问题。。。有什么想法吗?,wcf,dynamic,tfsbuild,Wcf,Dynamic,Tfsbuild,我有一个WCF项目,它公开了两个服务。当我在本地构建服务时,它运行良好。TFS生成创建程序集时,其中一个服务不工作。在调用服务之前,客户端应用程序抛出一个“索引超出数组边界”异常 我们对迁移的基于MSBuild的项目使用TFS2010,而不是新的工作流过程 我可以用我机器上的发布版本替换TFS构建的DLL,然后服务开始工作。我可以将TFS构建版本的DLL放在我的机器上,而我的本地服务开始失败 我检查过的东西: 所有项目都设置为构建任何CPU版本 这两台机器都安装了VS2010 SP1 反汇编这

我有一个WCF项目,它公开了两个服务。当我在本地构建服务时,它运行良好。TFS生成创建程序集时,其中一个服务不工作。在调用服务之前,客户端应用程序抛出一个“索引超出数组边界”异常

我们对迁移的基于MSBuild的项目使用TFS2010,而不是新的工作流过程

我可以用我机器上的发布版本替换TFS构建的DLL,然后服务开始工作。我可以将TFS构建版本的DLL放在我的机器上,而我的本地服务开始失败

我检查过的东西:

  • 所有项目都设置为构建任何CPU版本
  • 这两台机器都安装了VS2010 SP1
  • 反汇编这两个DLL表明它们包含相同的代码
有点担心:我的机器是Windows7x64,构建机器是WindowsServer2003x86。然而,我认为任何CPU都意味着在构建过程中这不应该是一个问题

有人对调查这个问题的其他方法有什么建议吗

来自客户端的堆栈跟踪包括:

System.ServiceModel.FaultException 1[System.ServiceModel.ExceptionDetail]:索引超出了数组的边界。(故障详细信息等于ExceptionDetail,可能由IncludeExceptionDetailInFaults=true创建,其值为:
System.IndexOutOfRangeException:索引超出了数组的边界。
在Microsoft.CSharp.RuntimeBinder.ExpressionTreeCallRewriter.GetMethodInfoFromExpr(EXPRMETHODINFO methinfo)上
在Microsoft.CSharp.RuntimeBinder.ExpressionTreeCallRewriter.GenerateCall(EXPRCALL-pExpr)中
在Microsoft.CSharp.RuntimeBinder.ExpressionTreeCallRewriter.VisitCALL(EXPRCALL-pExpr)中
位于Microsoft.CSharp.RuntimeBinder.Semantics.ExprVisitorBase.Dispatch(EXPR-pExpr)
位于Microsoft.CSharp.RuntimeBinder.Semantics.ExprVisitorBase.Visit(EXPR-pExpr)
在Microsoft.CSharp.RuntimeBinder.ExpressionTreeCallRewriter.GenerateLambda(EXPRCALL pExpr)上
在Microsoft.CSharp.RuntimeBinder.ExpressionTreeCallRewriter.VisitCALL(EXPRCALL-pExpr)中
位于Microsoft.CSharp.RuntimeBinder.Semantics.ExprVisitorBase.Dispatch(EXPR-pExpr)
位于Microsoft.CSharp.RuntimeBinder.Semantics.ExprVisitorBase.Visit(EXPR-pExpr)

在Microsoft.CSharp.RuntimeBinder…

中,您可以检查以下几点:

  • 您是否使用了任何预编译器,比如ngen,它会根据机器的CPU编译代码
  • 您是否使用任何第三方库
  • 关于64位,windows 2003框中IIS上的应用程序池设置是什么
  • 对于这两台机器,.net framework的修补程序级别是否相同

我以前在参与的一个大型web项目中遇到过这个问题,这确实令人沮丧。在Visual Studio中生成有时可能与直接使用MSBuild生成不同。MSBuild有x86和x64版本,它们的工作方式也可能不同。请参阅以下文章:

您还可以检查生成计算机上是否有.Net Framework和Visual Studio的最新版本和修补程序

下面是我为您找到的另一篇文章,其中列出了一些其他x64 MSBuild问题:


希望有帮助:)

谢谢你的建议。。。都是好主意

我发现我的问题更微妙。大会正在利用动力。如果您使用dynamics调用具有公共基类型的类上的方法,其中基类型位于不同的程序集中,那么就会出现一个鲜为人知的动态错误。dynamics实现查找要调用的方法的方式使用MetadataToken来标识该方法,但是这并不能保证是唯一的accross程序集,因此dynamics可能会混淆,并尝试调用不同的方法,可能使用不同数量的参数,因此会出现IndexOutOfRangeException

这已报告并修复,但尚未提供:

我仍然不知道为什么DLL的一个版本可以工作,而另一个版本不能。但由于没有使用公共基类,问题就消失了