Teamcity并注册dll

时间:2011-07-19 17:58:06

标签: build teamcity

我正在尝试使用TeamCity Professional 6.5.2构建项目 我有一个使用visual foxpro dll的MVC Visual Studio 2010项目。 构建失败,因为dll未注册。 作为构建过程的一部分,如何在构建机器中注册该DLL?

谢谢!

5 个答案:

答案 0 :(得分:3)

罗德里戈有两种不同的场景,你的场景将属于其中一种:

可以由项目引用的程序集:尽可能在源代码管理存储库(10th Commandment)中包含依赖程序集,通常在“libs”文件夹中引用必要的项目。这会集中所有依赖项,使新开发人员可以轻松入门并解决TeamCity构建问题。

需要安装GAC的程序集:有时只需要在GAC中安装程序集(即RightFax)。坦率地说,在这种情况下最容易做的就是在GAC中安装该死的东西。这是一个例外,虽然有些人会在哲学上反对它,但替代方案可能会变得有点复杂(即自动化安装作为构建的一部分),而对于金钱,我宁愿把时间花在其他地方。

答案 1 :(得分:1)

在构建代理程序计算机上注册所有DLL是一个坏主意,例如,有时您可能会发现必须在构建代理程序计算机上安装Visual Studio;)

我建议将这些库与您的代码库一起放在源代码管理系统中(我假设您正在使用它),并通过声明一个MSBUild属性来引用lib的文件夹,如

<PropertyGroup>
  <LibFolder>$(PathFromCommandLineOrJustHardCodedPath)</LibFolder>
</PropertyGroup>

然后在进行构建/编译之前,只需使用标准MSBuild命令Copy将文件从$(LibFolder)复制到build $(OutputFolder)中,方法是指定源文件和目标文件,就这样。

要强制TeamCity从VCS文件夹中拾取Lib(dll)文件,只需将路径映射添加到:

TeamCity Configuration Settings -> Edit Build Configuration -> VCS Root settings -> Client Mapping

编辑:

在您的情况下,您的集成测试看起来依赖于您需要启动的外部COm服务器,因此您可以以编程方式注册此DLL,例如在TestSetup中,然后不要忘记在测试TearDown中取消注册它。 无论如何你必须只引用这个DLL作为 VS Project -> Add Existing Item -> Add as Link +设置 Copy to Output Directory -> Copy if newer

如何注册COM dll:请参阅this SO post

答案 2 :(得分:1)

在每台机器上安装程序集(dev,build,prod)将使未来的更新和任何持续集成系统在将来难以维护。

最好在工作目录中创建一个文件夹(我称之为“资源”),其中包含每组DLL的文件夹。然后,您每次只需直接从项目中引用程序集。您在不同的项目中获得了重复的DLL,但它使一切都非常简洁。

在Visual Studio 2010中,您可以下载一个名为NuGut的小工具,我相信它有助于以更好的方式管理程序集。

答案 3 :(得分:0)

最后,我在运行regsvr32命令的Visual Studio中添加了一个prebuild事件。 dll位于已知位置,因此我引用了这种方式: regsvr32 / s $(SolutionDir)Lib \ ProjDataAccess \ ProjDataAccess.dll

答案 4 :(得分:0)

同意Troy Hunt。

对于与TeamCity 8.0.2的持续集成,您需要GAC的程序集(自定义共享程序集)参考,请执行以下操作。

1. Add the assembly to the build pack (In my case its nuget package).
2. Before starting the build process (MSBuild, Visual Studio etc), register the assembly to GAC with the help of a command line build runner.
3. Continue with the build process.

通过执行上述步骤,如果您正在使用MSBuild,则构建过程可以链接到GAC的有效引用,这可以生成预期的构建结果。

在我的情况下,代码引用GAC中的自定义组件,MSBuild忽略了程序集引用并完成了构建过程而没有异常。但是构建输出的部署失败了。为了克服这种情况,我使用了给出的步骤。

注意:TeamCity代理必须在提升的用户帐户下运行。否则,将不允许添加到GAC,并且构建过程可能会失败。

相关问题