WCF RIA服务中的链接文件不在TFS Build服务器中构建

时间:2013-02-06 14:21:06

标签: tfs wcf-ria-services tfsbuild using tfs2012

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

我的开发机器上的所有内容都没有任何问题,但是当我检查它时,创建一个标准的构建定义并运行该构建定义我遇到了以下问题。链接文件具有usings(例如UsingNamespace)到其他项目,这些项目也由我们构建并在WCF / Silverlight之前构建,但是在通过TFS构建服务器构建时弹出以下错误:

  

无法找到类型或命名空间'UsingNamespace'(是吗?   缺少using指令或程序集引用?)'

我查看了这个问题的解决方案吗?

编辑1

只是尝试将链接文件的Copy to Output Directory属性设置为Copy Always,但这仍然给我带来了与我预期相同的错误。问题是链接文件放在可以使用usings的地方,但WCF RIA服务无法访问/找到它。

编辑2

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

编辑3

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

3 个答案:

答案 0 :(得分:4)

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

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

enter image description here

答案 1 :(得分:2)

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

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

  • Solution1.sln(TFS Build Pass)

    • project1.csproj
    • project2.csproj(引用项目1)
  • Solution2.sln(TFS构建失败)

    • project3.csproj(引用项目1的二进制输出)

TFS开箱即用而没有自定义工作流程的期望是这个简单的构建将失败。原因是在您的开发框中,所有项目都将输出生成到一个目标,而在tfs构建中,您的项目将构建为$(Outdir)。

有些事情要尝试

简单(在我看来是最佳做法)

  Create 1 solution and use project references instead of file references.

<强>复合

  Build using MSBuild project files
  Modify your windows workflow to not override the $(Outdir)
  Copy the binaries after a build is complete.

自动构建的最佳做法

  • 从命令行构建
  • 从cmd构建NON vs2010命令行。
    • C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe FullpathtoSolutionFile.sln

干杯!

答案 2 :(得分:1)

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