使用msbuild,如何在Csc Task Resources参数中指定可选的'identifier'参数?

时间:2017-09-18 21:08:42

标签: c# msbuild csc

我尝试了以下msbuild脚本(删除了大多数不相关的代码):

<ItemGroup>
    <EmbeddedResource Include="$(ResourceLocation)logom.ico">
        <Id>resources.icon.m</Id>
    </EmbeddedResource>
    <EmbeddedResource Include="$(ResourceLocation)logo.png">
        <Id>resources.image.banner</Id>
    </EmbeddedResource>
</ItemGroup>

<Target Name="build" Inputs="@(Compile)" Outputs="$(OutputPath)$(AssemblyName).exe">
    <ItemGroup>
        <EmbeddedResource>
            <TaggedResource>$([System.String]::Copy('$(ResourceLocation)%(Filename)%(Extension),%(Id)'))</TaggedResource>
        </EmbeddedResource>
    </ItemGroup>

    <Csc
        Sources="@(Compile)"
        Resources="@(EmbeddedResource->'%(TaggedResource)')"
    />
</Target>

导致这样的输出(我修剪了一些不相关的输出):

BuildTools\MSBuild\15.0\Bin\Roslyn\csc.exe /resource:"res\logom.ico,resources.icon.m" /resource:"res\logo.png,resources.image.banner"

我正在尝试利用Csc任务的资源参数的可选“identifier”参数。 我认为它失败了,因为输出得到每个项目的引号,所以Csc任务认为整个事情是文件名。我如何指定这些资源价值&amp;没有引号的参数对?

这是我的第一个msbuild脚本,所以我很容易偏离目标。

1 个答案:

答案 0 :(得分:0)

获得所需的结果:

<ItemGroup>
    <EmbeddedResource Include="$(ResourceLocation)logom.ico">
        <LogicalName>resources.icon.m</LogicalName>
    </EmbeddedResource>
    <EmbeddedResource Include="$(ResourceLocation)logo.png">
        <LogicalName>resources.image.banner</LogicalName>
    </EmbeddedResource>
</ItemGroup>

<Target Name="build" Inputs="@(Compile)" Outputs="$(OutputPath)$(AssemblyName).exe">
    <Csc
        Sources="@(Compile)"
        Resources="@(EmbeddedResource)"
    />
</Target>

...因为“LogicalName”是与“identifier”参数对应的元数据条目。