2016-09-14 51 views
0

我在数据层项目中有一个后生成事件上的副本取决于所选择的构建配置不同的配置文件到目标文件夹,即某些文件复制到所有相关项目的CI服务器

:: 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服务器上的文件夹的目标,我发现,无论我做什么,在服务器上的目标文件夹总是得到原来的配置文件。事实证明,我将这些依赖关系自己添加到MSTest用于复制必要文件的LocalTestRun.testconfig文件中。我很久以前就这样做了,忘了。原因是引用数据层的测试项目根本没有得到配置文件的复制。

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

+0

如何检查它是否是原始文件?按时间,内容还是其他?你怎么知道其他项目引用原始文件? –

+0

@starain:这是问题之一,Visual Studio知道这一点,因为他们引用复制文件的项目作为其构建过程的一部分(文件类型设置为“内容”,“总是复制”)。到目前为止,我不必检查,因为通过开发机器和我的测试服务器具有相同的配置。但事实证明,我前一段时间自己做了一件事,并忘了它(请参阅上面的更新)。 – Lou

+1

您可以将解决方案发布为答案,并在24小时后将其标记为答案。 –

回答

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)

+0

你的意思是手动指定所有项目?我猜这会起作用,但最终结果证明我的单元测试配置是通过修改后的文件再次复制原始文件(请参阅我的更新)。 – Lou

0

由于我的问题与复制的单元测试目的的适当的配置文件是明确的相对路径,不过,我觉得我可能会添加此作为答案。

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

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

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

相关问题