在msbuild中,如何在Csc任务资源参数中指定可选的“标识符”参数?

问题描述:

我尝试以下的MSBuild脚本(使用最不相干的代码删除):在msbuild中,如何在Csc任务资源参数中指定可选的“标识符”参数?

<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> 

导致这样的输出(I修剪一些无关输出):

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

我试图采取Csc任务的资源参数的可选“标识符”参数的优点。 我认为它失败了,因为输出得到每个项目的引号,所以Csc任务认为整个事情就是文件名。如何指定不带引号的这些资源值&参数对?

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

+0

我解决了这个问题。对于那些感兴趣的,我不得不将ItemGroup Id标签更改为“LogicalName” – marcaroni

,以获得期望的结果:

<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”是对应于“标识符”参数中的元数据条目。