我尝试了以下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脚本,所以我很容易偏离目标。
答案 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”参数对应的元数据条目。