Я попробовал следующий скрипт 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. Я думаю, что это не удается, потому что выходные данные содержат кавычки вокруг каждого элемента, поэтому задача Csc считает, что все это имя файла. Как я могу указать эти пары значение ресурса и аргумент без кавычек?
Это мой первый скрипт msbuild, поэтому я легко могу сбиться с пути.