如何将已转换批次的结果添加到原始项目集?

时间:2011-11-11 19:45:54

标签: msbuild

我有一个MSBuild脚本,它使用自定义任务从AssemblyInfo文件中提取版本信息:

<GetAssemblyInfo
    AssemblyInfoFiles="@(WebProject->
        '%(RootDir)%(Directory)Properties\AssemblyInfo.cs')">
    <Output TaskParameter="AssemblyInfo" ItemName="AssemblyInfo"/>
</GetAssemblyInfo>

这会生成一组新项目,其中包含我需要的信息作为进一步的元数据。

此时,我不知道如何将元数据关联回源项WebProject。从概念上讲,它们通过路径相互关联,由原始变换%(RootDir)%(Directory)Properties\AssemblyInfo.cs表示。

我尝试使用MSBuild批处理语法的各种组合,但每一个似乎都比我想要的更远。

我很擅长使用MSBuild进行批处理,所以任何例子都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

我无法在一步中获得我想要的设备,但是这个解决方案确实产生了我需要的输出。

创建所有项目和程序集版本的交叉连接产品。另外包括AssemblyInfo文件所在的目录。

<ItemGroup>
    <VersionedProject Include="@(WebProject)">
        <Version>%(AssemblyInfo.AssemblyFileVersion)</Version>
        <AssemblyInfoDir>
            %(AssemblyInfo.RootDir)%(AssemblyInfo.Directory)
        </AssemblyInfoDir>
    </VersionedProject>

然后删除属性目录不是AssemblyInfo文件位置的所有项目。

    <VersionedProject
        Remove="@(VersionedProject)"
        Condition="'%(RootDir)%(Directory)Properties\' != '%(AssemblyInfoDir)'"/>
</ItemGroup>

以下输出正确的项目名称和版本号列表。

<Message Text="%(VersionedProject.Filename): %(VersionedProject.Version)" />