Потратив целый день на изучение MsBuild: файлы проектов, элементы, свойства, цели и задачи, я все еще не могу найти решение своей проблемы.
Я стремлюсь создать собственную цель в моем .csproj длягенерировать двоичные файлы из входных текстовых файлов с помощью консольной программы.Цель делает то, что должна делать.Но я хочу, чтобы сгенерированные файлы были частью файла проекта как Контент, который должен быть скопирован (опубликован) вместе с приложением.
Я получил следующий файл проекта:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0</TargetFrameworks>
</PropertyGroup>
<PropertyGroup>
<MyTool>.\tools\mytool.exe</MyTool>
</PropertyGroup>
<Target Name="MyTarget" DependsOnTargets="Restore" BeforeTargets="Build;Publish"
Inputs="@(TxtFiles)"
Outputs="@(TxtFiles->'%(RootDir)%(Directory)%(Filename).bin')">
<Exec Command="$(MyTool) -o %(TxtFiles.RootDir)%(TxtFiles.Directory)%(TxtFiles.Filename).bin %(TxtFiles.Identity)"
Outputs="@(TxtFiles->'%(RootDir)%(Directory)%(Filename).bin')">
<Output TaskParameter="Outputs" ItemName="BinFiles" />
</Exec>
</Target>
<ItemGroup>
<TxtFiles Include="my_resources\*.txt" />
<Content Include="@(TxtFiles)">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
<Content Include="@(BinFiles)">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<PublishState>Included</PublishState>
</Content>
</ItemGroup>
</Project>
К сожалению - это не заполняет элемент @(BinFiles)
.Если, если удалить это вручную (как если бы вы вызывали инструмент заранее), это работает:
<ItemGroup>
<Content Include="my_resources\*.bin">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<PublishState>Included</PublishState>
</Content>
</ItemGroup>
Я хочу добиться того же поведения.Кроме того, поскольку моя цель объявляет входы и выходы, как бы она заполнила свои выходы для добавления в качестве контента?