在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脚本,所以我可以很容易地离开目标。
答
,以获得期望的结果:
<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”是对应于“标识符”参数中的元数据条目。
我解决了这个问题。对于那些感兴趣的,我不得不将ItemGroup Id标签更改为“LogicalName” – marcaroni