2015-12-04 26 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

這工作,非常感謝! –