C#,TeamCity-避免TeamCity服务器上的构建后事件

C#,TeamCity-避免TeamCity服务器上的构建后事件,c#,visual-studio-2010,teamcity,projects-and-solutions,C#,Visual Studio 2010,Teamcity,Projects And Solutions,我有许多项目,我已经将它们输出到我的开发环境中的DLL中央存储库中。这是通过在项目的生成后事件命令行中添加一个XCopy命令来实现的 XCOPY $(TargetDir)$(TargetFileName) C:\DEV\library /I /R /Y 我希望这种情况在开发模式下发生,但在TeamCity服务器上时,我希望避免执行脚本。这样做的最佳方式是什么?我将通过谷歌和文档进行搜索,但我希望其他人也以类似的方式使用TeamCity,并建议如何实现这一目标 谢谢 编辑: XCopy应该将dl

我有许多项目,我已经将它们输出到我的开发环境中的DLL中央存储库中。这是通过在项目的生成后事件命令行中添加一个XCopy命令来实现的

XCOPY $(TargetDir)$(TargetFileName) C:\DEV\library /I /R /Y
我希望这种情况在开发模式下发生,但在TeamCity服务器上时,我希望避免执行脚本。这样做的最佳方式是什么?我将通过谷歌和文档进行搜索,但我希望其他人也以类似的方式使用TeamCity,并建议如何实现这一目标

谢谢

编辑:


XCopy应该将dll复制到中心文件夹(C:\DEV\library)中,依赖于dll的外围项目可以访问该文件夹。事实上,我已经从项目中删除了xcopy,因为我觉得使用它更像是一种黑客行为,而不是一种帮助。感觉就像我把一个方形的钉子塞进了一个圆孔。

你可以用自己的程序替换“xcopy”,比如说myXCopy
myXCopy可以检查环境变量以决定是否应该进行复制。
然后可以控制何时设置此环境变量

编写自己的MsBuild任务来执行复制。
将任务挂接到标准编译任务的末尾

使teamcity传入自定义任务检查的MsBuild变量

您可以在生成配置或生成代理配置中定义环境变量,并仅在变量未按此处所述设置时触发copy命令:

据我所知,您正在使用XCopy将生成输出复制到外部文件夹,以便相关解决方案可以将输出用作程序集引用。您已经正确地发现使用构建后事件和XCopy是错误的,因为它开始给您带来痛苦。我们在API解决方案中也有类似的目标,我将尝试描述我们用我们的解决方案所做的事情,但请记住,没有银弹,有时仍然需要妥协

项目结构 项目结构不是VisualStudio中的结构,而是如何组织项目所需的源、库和其他外部项,此模式可以应用于大多数语言。项目结构应干净、易于理解,并且在所有项目之间保持一致。我使用的结构与许多开源项目一致,通常包括以下内容

- root
|-- bin
|-- build
|-- lib
|-- src
|-- tools
  • 根目录-根目录应包含尽可能少的项目
  • bin-bin是生成的输出应该放在的地方。这可能只在您有多个输出时才相关,如果您只有一个输出,例如web项目,它可以保持在原来的位置。我没有发现使用调试和发布版本的子文件夹的理由
  • 生成-包含生成文件,如用于生成源代码、运行测试、代码覆盖率、代码分析、文档等的MSBuild或NAnt脚本
  • lib-包含项目输出所依赖的所有外部或内部第三方库。我通常为每个库使用子文件夹,但我不确定是否真的需要
  • src-包含在所选IDE中打开项目、编辑、生成和运行所需的所有文件。尽量保持这里的结构尽可能平坦,没有必要让它变得太复杂,因为其他开发人员不可能像您那样有条不紊,最终您会将项目放在错误的文件夹中。我所做的最多就是为所有测试创建一个测试文件夹,但即使这样也不是必需的
  • 工具-它包含生成所依赖的所有应用程序、程序集和外部文件,但源不应依赖于其中任何一个,因为它的依赖关系是库
文件路径

项目中具有的所有文件路径都应该是相对的。一旦您开始使用绝对文件路径(如示例中所示),您将开始感到痛苦。问题将出现在开发人员将其源代码放在不同驱动器上的开发机器上,或者在构建服务器上,在构建服务器上执行项目从何处运行要困难得多

一般的经验法则是项目应该是自包含的。在一个完美的世界中,不应该依赖根文件夹之外的任何东西。有时这很难做到,尤其是在遗留项目上,或者在您有com、注册表或服务需求的情况下,但只要稍加考虑和修改,这些需求中的大多数都可以得到缓解。最终,您希望能够做到的是尽可能容易地将项目放到给定的机器上并运行它

构建输出

当我做一个API项目时,我将项目的输出放在我上面提到的bin文件夹中。您已经在后期生成事件期间使用XCopy完成了此操作。这是没有错的,因为它会做你想要的,但与VisualStudio有一个更好的方法。如果转到项目属性的“生成”部分,则可以更改输出的放置位置。请记住在更改之前选择所有生成配置

引用外部项目中的程序集

将API分离到其on解决方案中并将输出作为程序集引用而不是项目引用引用的原因之一是,解决方案变得太大,或者您需要从多个解决方案中引用它们。如上所述,项目不应该依赖于项目根以外的任何东西。因此,您不应依赖于外部项目的输出,而应依赖于A.项目位于开发人员计算机上,B.位于正确的位置

我有几种方法可以克服这个问题:

  • API项目是否是美国主要项目中的子项目