在目标块外部使用MSBuild PropertyGroup
我有一个项目文件集合:在目标块外部使用MSBuild PropertyGroup,msbuild,Msbuild,我有一个项目文件集合: <ItemGroup> <ApplicationToDeploy Include="Frontend.WebSite.csproj;11.WebServices.csproj;22.WebServices.csproj"/> <ApplicationToDeploy Include="33.WebServices.csproj;44.WebServices.csproj;Workflow55Svc.csproj"/&g
<ItemGroup>
<ApplicationToDeploy
Include="Frontend.WebSite.csproj;11.WebServices.csproj;22.WebServices.csproj"/>
<ApplicationToDeploy
Include="33.WebServices.csproj;44.WebServices.csproj;Workflow55Svc.csproj"/>
</ItemGroup>
但是我想在目标块之外初始化这个项目组。像这样:
<PropertyGroup>
<Cfgs>@(ApplicationToDeploy->'%(RootDir)%(Directory)*.config')</Cfgs>
</PropertyGroup>
<ItemGroup>
<InputConfigs Include="$(Cfgs)" />
</ItemGroup>
<Target Name="111">
<Message Text="Cfgs: @(InputConfigs)"/>
</Target>
我不明白发生了什么事。是否有可能在目标块之外获得相同的结果
我不明白发生了什么事
此行为是以下因素的影响:
在构建的评估阶段:
- 属性是按照它们的顺序定义和修改的 出现。执行属性函数。表单中的属性值 $(PropertyName)在表达式中展开。属性值 设置为展开表达式
- 项目定义按其出现的顺序定义和修改。属性函数已在表达式中展开。元数据值设置为扩展表达式
- 项目类型按其出现的顺序定义和修改。格式@(ItemType)中的项值将展开。项目转换也被展开。属性函数和值已在表达式中展开。项目列表和元数据值设置为扩展表达式
- 在目标中定义的属性和项目 按它们出现的顺序一起计算。财产 函数被执行,属性值在 表达。项目值和项目转换也将展开。 属性值、项类型值和元数据值设置为 扩展表达式。”
(*.config)
。当您在目标内部定义“Cfgs”时,InputConfigs将接收Cfgs的扩展值(以分号分隔的文件夹字符串列表),只解析通配符。另一方面,当您在目标外部定义“Cfgs”时,InputConfigs将接收Cfgs的未扩展值(@(ApplicationDeploy->'%(RootDir)%(Directory)*.cs'))
。当InputConfig展开它时,它会在文件夹的分号分隔字符串列表中显示,但不会解析通配符(*.config)
是否有可能在目标区块外获得相同的结果
我认为InputConfigs应该总是接收扩展的目录列表。扩展是在构建的执行阶段进行的。在这个阶段,只有
对目标中定义的属性和项目进行评估。因此,我会将所有初始化保留在“初始化”目标块内。我不是说不可能在目标块外进行初始化,但出于上述原因,它似乎不符合逻辑。=]
希望这有帮助
Cfgs: C:\Sources\WebServices\11\WebServices\11.WebServices\Web.config;C:\Sources\WebServices\22\WebServices\22.WebServices\web.log4net.config;C:\Sources\WebServices\33\WebServices\33.WebServices\web.environment.config
<PropertyGroup>
<Cfgs>@(ApplicationToDeploy->'%(RootDir)%(Directory)*.config')</Cfgs>
</PropertyGroup>
<ItemGroup>
<InputConfigs Include="$(Cfgs)" />
</ItemGroup>
<Target Name="111">
<Message Text="Cfgs: @(InputConfigs)"/>
</Target>
Cfgs: C:\Sources\WebServices\11\WebServices\11.WebServices\*.config;C:\Sources\WebServices\22\WebServices\22.WebServices\*.config;C:\Sources\WebServices\33\WebServices\33.WebServices\*.config