将某个文件复制到CI服务器上的所有相关项目

时间:2016-09-14 13:18:08

标签: visual-studio msbuild post-build-event

我的数据层项目中有一个post build事件,它根据所选的构建配置将不同的配置文件复制到目标文件夹,即

:: hibernate.cfg.xml is copied by default (set as "Content" file)
:: so override with the appropriate config for the build server

if $(ConfigurationName) == UnitTesting (
  copy "$(ProjectDir)hibernate.cfg.xml.unittesting" "$(TargetDir)hibernate.cfg.xml" /y
)

然后将其复制到此项目的相应目标文件夹(例如Company.Project.Data\bin\x86\UnitTesting)。但是,当我在CI服务器(Bamboo)上构建测试项目时,在引用数据层的所有测试项目中,我仍然得到原始文件

如何强制Visual Studio或MSBuild将适当的配置文件复制到针对特定配置引用此项目的所有目标?

(适用更新)

在查看CI服务器上的目标文件夹时,我注意到无论我做什么,服务器上的目标文件夹总是获取原始配置文件。事实证明,我自己将这些依赖项添加到LocalTestRun.testconfig文件中,MSTest使用该文件来复制必要的文件。我很久以前就这么做了,忘了;原因还在于引用数据层的测试项目根本没有复制配置文件。

最后,解决方案只是在CI服务器设置中指定不同的.testconfig文件(包含不同的依赖项)。

2 个答案:

答案 0 :(得分:0)

艰难的道路:

 copy "$(ProjectDir)hibernate.cfg.xml.unittesting" "$(TargetDir)hibernate.cfg.xml" /y

 copy "$(ProjectDir)hibernate.cfg.xml.unittesting" "$(TargetDir)..\OtherProjectOne\bin\$(Configuration)\hibernate.cfg.xml" /y

 copy "$(ProjectDir)hibernate.cfg.xml.unittesting" "$(TargetDir)..\OtherProjectTwo\bin\$(Configuration)\hibernate.cfg.xml" /y

基本上来自$(TargetDir)的相对路径

答案 1 :(得分:0)

由于我的问题主要是为了单元测试目的而复制正确的配置文件,我可能会将其添加为答案。

问题是我的LocalTestRun.testconfig文件中包含以下元素:

<Deployment>
  <DeploymentItem filename="Project\DataLayer\hibernate.cfg.xml" />
</Deployment>

始终将配置文件复制到所有测试项目的目标构建文件夹中。所以解决方案是创建一个不同的.testconfig文件并在我们的构建服务器上使用它。