我是否应该在构建服务器上安装SDK?

3

这是一个 .net 构建服务器。

我收到了以下错误:

c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets(1679,9): error MSB3091: Task failed because "LC.exe" was not found, or the .NET Framework SDK v2.0 is not installed.  

The task is looking for "LC.exe" in the "bin" subdirectory beneath the location specified in the SDKInstallRootv2.0 value of the registry key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework. 

 You may be able to solve the problem by doing one of the following: 

 1.) Install the .NET Framework SDK v2.0.  

2.) Manually set the above registry key to the correct location.  3.) Pass the correct location into the "ToolPath" parameter of the task.

这是因为我们使用了一个需要LIC.exe编译的组件。
现在我可以通过在构建服务器上安装最新的Microsoft SDK来解决问题,但我认为构建服务器的整个目的是不需要安装开发工具。我想我可能可以解决这个问题,但需要一些时间去研究(就像这些人所做的那样)。 http://richardsbraindump.blogspot.com/2009/07/some-teambuild-fun-and-games.html 我应该安装SDK吗?更重要的是: 构建服务器的主要目的是什么?
4个回答

8
构建服务器的主要目的是构建代码。构建代码所需的任何内容都需要在构建服务器上存在。

6

您的构建服务器必须装有所有的构建/开发工具和库,这样才能够进行构建。

因此,请确保安装SDK。


是的,这似乎有些合理,但是那么如何解决旧版的“开发工具上没有错误,但在部署工具上却有错误”的问题呢?在我看来,在这种情况下使用这种哲学就好像只是想在另一台机器上构建而已。 - KevinDeus
如果您升级工具集并破坏了一堆构建(我们有> 20个),那么修复它所花费的时间是否合理? - KevinDeus
3
构建服务器的作用是保持构建环境的一致性。开发人员的电脑经常会发生变化,安装不同版本的库文件。通过使用构建服务器,您可以确保构建过程始终使用正确的库文件和编译器。如果要验证构建是否在非开发机器上运行正确,需要在不同的机器上运行所有单元测试。 - Simon P Stevens

4
最好的方法是将构建所需的所有内容存储在源代码控制中。这样做时,当您的构建链更新时,您无需通过所有构建服务器,它会自动发生。另一个优点是,您可以回到过去,并仍然能够构建所有内容,而不需要深入研究所有旧CD中的工具,以构建产品的旧版本。但是,这可能对于所有构建工具都不可能实现。例如,我们尝试使用Visual Studio 2005进行此操作,但在从未安装的工具链构建时,我们从mspdbsrv获得了奇怪的间歇性pdb错误。因此,不幸的是,我们所有的构建服务器都安装了VS2005(但没有PS3工具链,这真的很好,因为它经常更新)。

你从事PS3开发。很酷。你是如何进入这个领域的?编译器和库是公开可用的还是需要与Sony签订协议? - Simon P Stevens
我同意。我真的认为你需要将构建所需的所有工具都保留在源代码控制中。将工具保存在源代码中可以使项目更加健壮,从而在升级工具到新版本时防止混乱(并且通过源代码控制的“时间倒流”功能,很少会破坏过去的构建!)微软有时确实会让人感到困难(例如其与LC.exe需要注册表条目的范例),但是这可以在构建脚本中处理,并且绝对值得花费时间编写脚本,而不是启动和维护单独的单元测试服务器。 - KevinDeus
并不是说有时候不需要单独的测试服务器!但在大多数情况下,保持最小化的工具集(例如仅仅运行构建所需的软件)似乎可以使事情简单化,并为您提供更多选项。 - KevinDeus
@Simon P Stevens:这些工具非常专有,但我在Guerrilla Games工作,而我们是Sony的一部分,这很有帮助。 :) - Sebastiaan M

3
我认为构建服务器需要安装构建所需的所有内容;测试服务器可能没有安装任何SDK。

这也有一定的道理,但我们使用ccnet,它会在构建过程中运行NUnit测试。(如果测试通过,则构建也会通过)你是指某种手动测试服务器吗? - KevinDeus
不同的地方称之为不同的名称 - 测试,验收。这是一个非常接近生产环境的环境,以确保系统(包括其安装)在没有任何支持工具或SDK的情况下正常工作。在这种环境下,NUnit测试可能不足够,但前端测试可能会更好(例如Canoo WebTest)。 - Otávio Décio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接