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

Это мой первый скрипт msbuild, поэтому я легко могу сбиться с пути.


person marcaroni    schedule 18.09.2017    source источник
comment
Я решил эту проблему. для заинтересованных мне пришлось изменить теги ItemGroup Id на LogicalName   -  person marcaroni    schedule 19.09.2017


Ответы (1)


чтобы получить желаемый результат:

<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" - это запись метаданных, соответствующая аргументу "идентификатор".

person marcaroni    schedule 18.09.2017