2015-12-04 21 views
1

我有一组客户特定的配置文件,这些文件在构建时位于单个发布文件夹中。文件名是这样的:MSBuild:使用复制任务根据文件名将文件列表复制到不同位置

  • CustomerA_InstanceConfigurationX.config
  • CustomerA_InstanceConfigurationY.config
  • CustomerB_InstanceConfigurationX.config
  • CustomerB_InstanceConfigurationY.config

...等

在构建,我想复制客户特定的配置文件为特定客户二进制文件夹

  • $(BuildDirectory)\二进制\安装程序\ CustomerA \产品名称\
  • $(BuildDirectory)\二进制\安装程序\ CustomerB \产品名称\

所以CustomerA_InstanceConfigurationX.config和CustomerA_InstanceConfigurationY.config将进入进入$(BuildDirectory)\二进制\安装程序\ CustomerA \产品名称\等等。

如何设置SourceFiles和DestinationFolder属性以实现此目的?

我有客户列表为实例财产元,并设置SourceFiles和DestinationFiles周围:

<ItemGroup> 
    <ConfigFilesToCopy Include="$(BuildDirectory)\stage\InstallerDev\%(Instance.Customer)\Setup\bin\Release\%(Instance.Customer)_*.*" /> 
    <DestionationsForConfigFiles Include="$(BuildDirectory)\Binaries\Installers\%(Instance.Customer)\InstallerDev\" /> 
</ItemGroup> 

<Copy SourceFiles="@(ConfigFilesToCopy)" DestinationFolder="%(DestionationsForConfigFiles.FullPath)" /> 

这只是份所有客户.config文件到但所有客户特定的Binaries文件夹。

使用消息任务,%(Instance.Customer)输出:

  • CustomerA
  • CustomerB
  • CustomerC。

%(ConfigFilesToCopy.Identity)输出:

  • “C:\构建\的AgentX \ YYY \ INSTALLER_DEV构建\阶段\ InstallerDev \ CustomerA \设置\ BIN \发布\ CustomerA_InstanceX.config “
  • ”C:\构建\的AgentX \ YYY \ INSTALLER_DEV构建\台\ InstallerDev \ CustomerA \ SETUP \ BIN \发布\ CustomerA_InstanceY.config“
  • ” C:\构建\的AgentX \ YYY \ INSTALLER_DEV构建\阶段\ InstallerDev \ CustomerB \ SETUP \ BIN \发布\ CustomerB_InstanceX。配置”
  • “C:\构建\的AgentX \ YYY \ INSTALLER_DEV构建\台\ InstallerDev \ CustomerB \ SETUP \ BIN \发布\ CustomerB_InstanceY.config”
  • 等等

%(DestionationsForConfigFiles。身份)输出:

  • C:\构建\ Agent8 \ Five0 \ INSTALLER_DEV构建\二进制\安装程序\ CustomerA \ InstallerDev \
  • C:\构建\ Agent8 \ Five0 \ INSTALLER_DEV构建\二进制\安装小号\ CustomerB \ InstallerDev \
  • C:\构建\ Agent8 \ Five0 \ INSTALLER_DEV构建\二进制\安装程序\ CustomerC \ InstallerDev \
  • 等等

如果有人可以提供在实现这一目标的一些帮助或有一个替代方法,这将是伟大的。 (例如,我可以将客户特定的配置文件重新组织成客户特定的文件夹或其他东西。)非常感谢!

[** 更新注释 **:现在,我将每个客户名称硬编码到ConfigFilesToCopy列表项目以及DestinationsForConfigFiles项目中。

<ConfigFilesToCopy Include="$(BuildDirectory)\stage\InstallerDev\CustomerA\Setup\bin\Release\CustomerA_*.*"> 
    <DestionationsForConfigFiles>$(BuildDirectory)\Binaries\Installers\CustomerA\InstallerDev\</DestionationsForConfigFiles> 
    </ConfigFilesToCopy> 

    <ConfigFilesToCopy Include="$(BuildDirectory)\stage\InstallerDev\CustomerB\Setup\bin\Release\CustomerB_*.*"> 
    <DestionationsForConfigFiles>$(BuildDirectory)\Binaries\Installers\CustomerB\InstallerDev\</DestionationsForConfigFiles> 
    </ConfigFilesToCopy> 

这工作,但我基本上想知道是否有可能做同样的事情明确使用客户名称,这样我就不必每次我们增加一个新客户的时间维护这个列表。

回答

0

制作这些文件的目的元数据(我改变了路径,以更好地配合在SO的代码中,但这个想法是一样的):

<Target Name="Copy"> 
    <ItemGroup> 
    <ConfigFilesToCopy Include="$(SomeDir)\%(Instance.Customer)\%(Instance.Customer)_*.*"> 
     <DestionationsForConfigFiles>$(SomeDir)\Binaries\%(Instance.Customer)</DestionationsForConfigFiles> 
    </ConfigFilesToCopy> 
    </ItemGroup> 

    <Message Text="Source=%(ConfigFilesToCopy.Identity) Dest=%(ConfigFilesToCopy.DestionationsForConfigFiles)" /> 
</Target> 
+0

这工作,非常感谢! –