MSBuild合并项目组
需要有关此MSBuild代码的帮助 我想生成4个具有不同设置的app.config文件,并为QA和生产创建2个设置文件 每个安装文件将有2个物理安装(生产线) 因此,QA设置应包括2个app.Config,其中包含生产线1和2的QA设置,生产设置也是如此 这里是我到目前为止所拥有的msbuild的摘录MSBuild合并项目组,msbuild,Msbuild,需要有关此MSBuild代码的帮助 我想生成4个具有不同设置的app.config文件,并为QA和生产创建2个设置文件 每个安装文件将有2个物理安装(生产线) 因此,QA设置应包括2个app.Config,其中包含生产线1和2的QA设置,生产设置也是如此 这里是我到目前为止所拥有的msbuild的摘录 <ItemGroup> <BuildEnvironment Include="QA"> <Server>qa-server</Server&g
<ItemGroup>
<BuildEnvironment Include="QA">
<Server>qa-server</Server>
<BuildEnvironment/>
<BuildEnvironment Include="Prod">
<Server>prod-server</Server>
<BuildEnvironment/>
<Line Include="1">
<Setting>A</Setting>
</Line>
<Line Include="2">
<Setting>B</Setting>
</Line>
<ItemGroup>
<Target Name="PublishSetup" Inputs="@(BuildEnvironment)" Outputs="%(BuildEnvironment.Identity)">
<!-- Doesn't work at all -->
<ItemGroup>
<AppConfig Include="@(BuildEnvironment);@(Line)">
<Path>$(MyOutDir)\App.Config-%(Identity)</Path>
</AppConfig>
</ItemGroup>
<!-- Copy app.config to the four new files -->
<Copy SourceFiles="$(AppConfigFile)" DestinationFiles="%(AppConfig.Path)" />
<!-- Update each new app.config with XmlUpdate (community task), something like the following -->
<XmlUpdate XmlFileName="%(AppConfig.Path)" XPath=".." Value="%(AppConfig.Server)" />
<XmlUpdate XmlFileName="%(AppConfig.Path)" XPath=".." Value="%(AppConfig.Setting)" />
<!-- Build 2 setup.exe, one for qa and one prod using a Exec-task passing in qa and prod as command line argument -->
<Exec Command="setupcompiler.exe /d%(BuildEnvironment.Identity)" />
</Target>
qa服务器
prod服务器
A.
B
$(MyOutDir)\App.Config-%(标识)
生成的4个app.configs应如下所示
app.config-QA-1
<connectionstring datasource="qa-server" ../>
<applicationSetting name="aName" value="A" />
app.config-QA-2
<connectionstring datasource="qa-server" ../>
<applicationSetting name="aName" value="B" />
app.config-Prod-1
<connectionstring datasource="prod-server" ../>
<applicationSetting name="aName" value="A" />
app.config-Prod-2
<connectionstring datasource="prod-server" ../>
<applicationSetting name="aName" value="B" />
app.config-QA-1
app.config-QA-2
app.config-Prod-1
app.config-Prod-2
想法是首先构建一个“交叉产品”,一个包含4种组合的项目组。如图所示,可以将两组的@和%组合起来。然后在第二步中,根据现有元数据使用额外元数据填充ItemGroup(添加元数据只是再次声明组并添加元数据)。这里有点棘手,因为从Line
开始,你们都想要Identity
和Setting
——我不知道一种很好的msbuild方法,所以我使用Identity |设置构建一个字符串,然后在|上拆分
<Target Name="PublishSetup">
<ItemGroup>
<AppConfig Include="@(BuildEnvironment)">
<Mod>%(Line.Identity)|%(Line.Setting)</Mod>
</AppConfig>
<AppConfig>
<Line>$([System.String]::Copy('%(Mod)').Split('|')[0])</Line>
<Setting>$([System.String]::Copy('%(Mod)').Split('|')[1])</Setting>
</AppConfig>
<AppConfig>
<Path>app.config-%(Identity)-%(Line)</Path>
</AppConfig>
</ItemGroup>
<Message Text="Path=%(AppConfig.Path) Server=%(AppConfig.Server) Setting=%(AppConfig.Setting)" />
</Target>
%(行标识)|%(行设置)
$([System.String]::复制('%(Mod)')。拆分('|')[0])
$([System.String]::复制('%(Mod)')。拆分('|')[1])
app.config-%(标识)-(行)
输出:
Path=app.config-QA-1服务器=QA服务器设置=APath=app.config-Prod-1 Server=Prod Server Setting=A
Path=app.config-QA-2服务器=QA服务器设置=B
Path=app.config-Prod-2服务器=Prod服务器设置=B
您的xml有语法错误,能否先确保它是有效的msbuild,并更清楚地说明生成的AppConfig应该是什么样子(例如,如果手动将其声明为ItemGroup)?谢谢您的评论,我已经更新了问题。希望它现在更有意义。