我想在很长一段时间内为一个大型项目安装CI服务器,但没有时间需要,我上面的人也不太关心它,他们只是说“这很有趣,而且它可以节省我们一些时间“但从来没有为它做任何事......
我对CC.NET有一些经验,但只是在小项目中,为了学习它的基础知识。最近有更多的业余时间,所以决定尝试TeamCity,并为大项目设置它。
然而,在处理引用时,有两个问题突然出现在我身上:
1)当处理多个项目时,我尽量不制作包含所有项目的大解决方案(并且总是不可能),因为我也使用SVN,我使用指向已编译程序集的相对路径其他项目(例如:.... \ Library A \ trunk \ Library \ bin \ release \ LibraryA.dll)。对我和参与该项目的同事来说,它一直都很好用,但是我很难让TC项目搞定,我应该如何建立我的依赖?
2)其中一个库是由另一家公司制作的,SVN存储库与它们共享。他们最近不得不添加对Oracle数据库的访问权限,并且他们使用Oracle数据提供程序,它似乎与在GAC中注册的程序集一起工作,但在构建解决方案时,它会输出另一个类似的程序集但具有不同的程序集版本(纠正我,如果我错了,我一直与内置的Oracle提供商合作,因为它已经足够了)。在我的公司方面,我们使用“输出组件”,项目编译并正常工作,但我们以前必须更改引用,并且修改存储库中的项目文件是不可能的,是否有任何解决方法对此?
感谢您的回复。
答案 0 :(得分:1)
对于1),当您的项目由TC构建时,您可以使用Svn externals从其他项目中获取程序集和其他依赖项。
您还可以将TC设置为检测外部更改的时间并使用最新版本构建项目,或者您可以将TC项目链接在一起,以便它们按顺序构建。
我已经投入了大量时间让CI服务器在我们的地方启动并运行,并且它确实得到了回报。它仍然需要花费一些时间让事情发生变化,但是会认真地建议你开始运行。
抱歉无法帮助您2)。
答案 1 :(得分:1)
For 1)您可以为Projects设置ReferencePath
并使用已编译的程序集指向目录。
在我们的TC配置中,我们将所有TeamCity依赖项加载到名为“Dependencies”的子目录,并将编译器的ReferencePath
设置为此目录。
使用MSBuild Runner非常简单:
在Build .proj
中,您需要定义一个属性(我们称之为ReferencePath
)
<PropertyGroup>
<ReferencePath>$(MSBuildProjectDirectory)\Dependencies\</ReferencePath>
</PropertyGroup>
然后用它调用MSBuild任务:
<MSBuild Projects="$(ProjectFiles)" Properties="Configuration=Release;ReferencePath=$(ReferencePath)" Targets="Rebuild" />
@(ProjectFiles)是一个简单的ItemGroup,它收集所有.csproj
- 文件。
<ItemGroup>
<ProjectFiles Include="$(MSBuildProjectDirectory)\**\*.csproj" />
</ItemGroup>
答案 2 :(得分:0)
通过修改引用属性并将其设置为不查找特定版本来解决#2。另一家公司似乎已经接受了它。
还没有时间检查#1的VCS Checkout规则。
答案 3 :(得分:0)
感谢所有回复,学到了一些新东西。
昨天可以与TC一起玩,了解更多有关VCS结账规则的信息,并发现,#1可以很容易地用工件解决(这个名字我起初并没有意识到它们是什么),所以我使用它,我的项目到目前为止没有任何问题。
你们对这种方法有何看法?图书馆给我带来了同一个项目的“核心”库的问题,所以我已经为他们设置了一个项目。