6

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

一切都在我的开发机器上构建没有任何问题,但是当我全部签入时,创建一个标准构建定义并运行该构建定义,我遇到了以下问题。链接的文件usings(例如使用命名空间)到其他项目也由我们构建并在 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 应用程序所需的项目。两个服务器上的 2 个工作区相同,要构建的项目也相同。

4

3 回答 3

4

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

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

在此处输入图像描述

于 2013-02-12T19:28:24.510 回答
2

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

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

  • Solution1.sln(TFS 构建通行证)

    • 项目1.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 构建一个非 vs2010 命令行。
    • C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe FullpathtoSolutionFile.sln

干杯!

于 2013-02-14T05:47:29.300 回答
1

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

于 2013-04-12T08:04:05.027 回答