WCF RIA服务中的链接文件未在TFS生成服务器中生成

WCF RIA服务中的链接文件未在TFS生成服务器中生成,tfs,wcf-ria-services,tfsbuild,using,Tfs,Wcf Ria Services,Tfsbuild,Using,我刚刚安装了一个TFS(2012)服务器,现在我正试图通过TFS构建服务器构建完整的代码(在VS2010中用.NET4.0编写)。但在我的解决方案中,我还有一个WCF RIA项目,其中包含链接文件,因为它们也在其他地方使用,并且不可能在WCF/Silverlight中添加对通用.NET二进制文件的引用 在我的开发机器上,所有的构建都没有任何问题,但是当我将其全部检入时,创建一个标准构建定义并运行该构建定义,我会遇到以下问题。链接的文件使用(例如使用名称空间)链接到我们也在WCF/Silverli

我刚刚安装了一个TFS(2012)服务器,现在我正试图通过TFS构建服务器构建完整的代码(在VS2010中用.NET4.0编写)。但在我的解决方案中,我还有一个WCF RIA项目,其中包含链接文件,因为它们也在其他地方使用,并且不可能在WCF/Silverlight中添加对通用.NET二进制文件的引用

在我的开发机器上,所有的构建都没有任何问题,但是当我将其全部检入时,创建一个标准构建定义并运行该构建定义,我会遇到以下问题。链接的文件使用(例如使用名称空间)链接到我们也在WCF/Silverlight之前构建的其他项目,但通过TFS构建服务器构建时会弹出以下错误:

找不到类型或命名空间“UsingNamespace”(是否为“”) 缺少using指令或程序集引用?'

我看过的这个问题有什么解决办法吗

编辑1

刚刚尝试将链接文件的
Copy to Output Directory
属性设置为
Copy Always
,但这仍然会产生与预期相同的错误。问题是链接文件被放置在某个地方,它可以使用
usings
,但WCF RIA服务无法使用访问/查找该文件

编辑2

刚刚尝试了我的本地测试TFS,在那里我可以做我想做的事情,在那里我用所需的解决方案创建了一个构建定义,使该项目与链接文件一起构建。这样做没有任何问题。然后,我在我们的TFS服务器上尝试了同样的方法,使用了一个新的构建定义,该定义具有与我的测试TFS相同的解决方案,但在这里它不起作用。我可以肯定的唯一区别是,我的测试TFS是TFS 2012更新1,而我的生产TFS还没有更新1。我将在下周尝试安装它

编辑3


我刚刚将我们的生产TFS更新为Update 1,但它仍然无法使用我的临时构建定义,该定义仅包含使用链接文件构建silverlight应用程序所需的项目。服务器上的两个工作区相同,要生成的项目也相同。

您需要在生成定义中指定要使用的生成的工作区信息。工作空间是生成过程从源代码管理复制到生成服务器的内容。如果构建服务器的工作区中没有所有内容,则无法正确构建

“工作区”选项卡中的源代码管理文件夹是您需要从TFS获取的文件的位置。生成代理文件夹是生成服务器预定义基本位置的相对路径。通常使用$(SourceDir)\Folder指定生成过程所需的“文件夹”

这听起来像是一个$(Outdir)问题。TFS中的生成定义会自动覆盖Bin文件夹。编译后,所有二进制文件都会重定向到bin文件夹。听起来你是在混合使用项目引用和文件引用。文件引用可能是导致生成失败的原因

例如,如果在同一版本中编译以下解决方案

  • 解决方案1.sln(TFS构建过程)

    • project1.csproj
    • 项目2.csproj(参考项目1)
  • 解决方案2.sln(TFS构建失败)

    • project3.csproj(参考项目1的二进制输出)
如果不定制您的工作流,TFS开箱即用的期望是,这个简单的构建将失败。原因是,在开发框中,所有项目都将输出到一个目标,而在tfs构建中,项目将构建到$(Outdir)

一些需要尝试的事情

简单(我认为是最佳实践)

复杂

  Build using MSBuild project files
  Modify your windows workflow to not override the $(Outdir)
  Copy the binaries after a build is complete.
自动生成的最佳实践

  • 从命令行生成
  • 从cmd生成非vs2010命令行。
    • C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe FullpathtoSolutionFile.sln

干杯

显然,TFS服务器上缺少WCF RIA services V1.0 SP2。如果安装了它,问题就解决了。

错误中的using语句指向的是什么-您自己的名称空间还是某些.net名称空间?它们指向我们自己的名称空间,生成输出将指向UNC路径。当您说其他项目也是由您在wcf/silverlight生成之前生成的时,您如何知道它们是正确的以前构建?我在引用由同一构建定义中的另一个解决方案构建的项目时也遇到问题。我假定这是相同的构造,命名空间不是由此解决方案“生成”的。MSBuild进程中的csc语句不包括那些用于引用的程序集,使您的解决方案处于不可生成状态。我们最终在每个解决方案中重建了所有程序集,这并不是我想要的情况,但它是有效的。TFS构建定义中包含的顺序并不影响项目的构建顺序。事实上,构建定义与构建几乎没有任何关系——它主要涉及获取文件、执行测试和一般的ALM内容。构建定义指定要构建的解决方案和配置(位于流程选项卡上)。如果您的依赖项目不是作为该解决方案的一部分构建的,那么它们就不会被构建。最简单的方法是在主解决方案中包含依赖的项目。这有帮助吗?如果必要的文件不在一个根目录下的源代码管理中,则可以创建多个源位置并将生成代理文件夹别名。如果要确定生成服务器查找程序集的位置,请启用TFS bui的诊断日志详细信息
  Build using MSBuild project files
  Modify your windows workflow to not override the $(Outdir)
  Copy the binaries after a build is complete.