【发布时间】:2013-02-06 14:21:06
【问题描述】:
我刚刚设置了一个 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 更新为更新 1,但它仍然无法使用我的临时构建定义,它仅包含使用链接文件构建 silverlight 应用程序所需的项目。两个服务器上的 2 个工作区相同,要构建的项目也相同。
【问题讨论】:
-
什么是错误指向的 using 语句 - 您自己的命名空间或某些 .net 命名空间?
-
它们指向我们自己的命名空间,构建输出将进入 UNC 路径。
-
当你说其他项目也是由你构建的并且在 wcf/silverlight 构建之前 - 你怎么知道它们是之前构建的?
-
我在引用由同一构建定义中的另一个解决方案构建的项目时也遇到了问题。我认为这是相同的结构,命名空间不是由该解决方案“构建”的。MSBuild 过程中的 csc 语句不包括那些用于引用的程序集,从而使您的解决方案无法构建。我们最终在每个解决方案中重建了所有程序集,这并不是我想要的情况,但它确实有效。
-
TFS 构建定义中包含的顺序不会影响项目的构建顺序。事实上,构建定义与构建几乎没有关系 - 它主要与获取有关文件、执行测试和一般 ALM 内容。构建定义指定要构建的解决方案和配置(位于进程选项卡上)。如果您的依赖项目不是作为该解决方案的一部分构建的,那么它们将不会被构建。最简单的做法是在您的主解决方案中包含相关项目。这有帮助吗?
标签: tfs wcf-ria-services tfsbuild using