Msbuild 如何将项目展平为属性?
如何将项目展平为属性 根据这一点,只需声明一个以项为值的属性即可 但我发现实际操作完全相反。使用MSBuild 4.0运行此项目时,指定目标Msbuild 如何将项目展平为属性?,msbuild,msbuild-4.0,Msbuild,Msbuild 4.0,如何将项目展平为属性 根据这一点,只需声明一个以项为值的属性即可 但我发现实际操作完全相反。使用MSBuild 4.0运行此项目时,指定目标install <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(Project-to-import)" Condition="'$(Project-to-import)' != ''" /> &l
install
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(Project-to-import)" Condition="'$(Project-to-import)' != ''" />
<ItemGroup>
<RuntimeProj Include="C:\TEMP\Design.proj" />
<DesigntimeProj Include="C:\TEMP\Run.dproj" />
</ItemGroup>
<PropertyGroup> <!-- Flatten out the items to properties. -->
<RuntimeProj>@(RuntimeProj)</RuntimeProj>
<!-- ^ This bit doesn't work. MS documentation is wrong? -->
<DesigntimeProj>@(RuntimeProj)</DesigntimeProj>
</PropertyGroup>
<Target Name="install">
<Message Text="Hello world!"/>
<MSBuild Projects="$(MSBuildProjectFile)" Targets="BuildRunPackage"
Properties="Project-to-import=$(RuntimeProj)" />
<MSBuild Projects="$(MSBuildProjectFile)" Targets="BuildDesignPackage"
Properties="Project-to-import=$(DesigntimeProj)" />
</Target>
<Target Name="BuildRunPackage">
<CallTarget Targets="Clean" />
<CallTarget Targets="Build" />
</Target>
<Target Name="BuildDesignPackage">
<CallTarget Targets="Clean" />
<CallTarget Targets="Make" />
<CallTarget Targets="Register" />
</Target>
<.Project>
@(RuntimeProj)
@(RuntimeProj)
。。。返回一个错误
错误MSB4012:表达式“要导入的项目=@(RuntimeProj)”不能在此上下文中使用。项目列表不能与预期项目列表的其他字符串连接。请使用分号分隔多个项目列表
我不是很确定,但我想你们会遇到评估顺序的问题。 据我所知,在评估项目之前先评估属性(请参阅中的属性和项目评估顺序) 如果您可以尝试从“安装目标”下的“全局”移动属性组,则应该可以
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(Project-to-import)" Condition="'$(Project-to-import)' != ''" />
<ItemGroup>
<RuntimeProj Include="C:\TEMP\Design.proj" />
<DesigntimeProj Include="C:\TEMP\Run.dproj" />
</ItemGroup>
<Target Name="install">
<PropertyGroup> <!-- Flatten out the items to properties. -->
<RuntimeProj>@(RuntimeProj)</RuntimeProj>
<DesigntimeProj>@(RuntimeProj)</DesigntimeProj>
</PropertyGroup>
<Message Text="Hello world!"/>
<MSBuild Projects="$(MSBuildProjectFile)" Targets="BuildRunPackage"
Properties="Project-to-import=$(RuntimeProj)" />
<MSBuild Projects="$(MSBuildProjectFile)" Targets="BuildDesignPackage"
Properties="Project-to-import=$(DesigntimeProj)" />
</Target>
<Target Name="BuildRunPackage">
<CallTarget Targets="Clean" />
<CallTarget Targets="Build" />
</Target>
<Target Name="BuildDesignPackage">
<CallTarget Targets="Clean" />
<CallTarget Targets="Make" />
<CallTarget Targets="Register" />
</Target>
</Project>
@(RuntimeProj)
@(RuntimeProj)
我不能绝对肯定,但我认为您会遇到评估顺序问题。
据我所知,在评估项目之前先评估属性(请参阅中的属性和项目评估顺序)
如果您可以尝试从“安装目标”下的“全局”移动属性组,则应该可以
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(Project-to-import)" Condition="'$(Project-to-import)' != ''" />
<ItemGroup>
<RuntimeProj Include="C:\TEMP\Design.proj" />
<DesigntimeProj Include="C:\TEMP\Run.dproj" />
</ItemGroup>
<Target Name="install">
<PropertyGroup> <!-- Flatten out the items to properties. -->
<RuntimeProj>@(RuntimeProj)</RuntimeProj>
<DesigntimeProj>@(RuntimeProj)</DesigntimeProj>
</PropertyGroup>
<Message Text="Hello world!"/>
<MSBuild Projects="$(MSBuildProjectFile)" Targets="BuildRunPackage"
Properties="Project-to-import=$(RuntimeProj)" />
<MSBuild Projects="$(MSBuildProjectFile)" Targets="BuildDesignPackage"
Properties="Project-to-import=$(DesigntimeProj)" />
</Target>
<Target Name="BuildRunPackage">
<CallTarget Targets="Clean" />
<CallTarget Targets="Build" />
</Target>
<Target Name="BuildDesignPackage">
<CallTarget Targets="Clean" />
<CallTarget Targets="Make" />
<CallTarget Targets="Register" />
</Target>
</Project>
@(RuntimeProj)
@(RuntimeProj)
是。这是方法。您必须在
中展平属性。是。这是方法。您必须在
中展平属性。