Спасибо всем, кто нашел время, чтобы сделать предложение о том, как решить эту проблему.
Оказывается, что если я хочу, чтобы мои скомпилированные файлы содержимого обрабатывались как файлы содержимого (поскольку они копируются в выходной каталог любого другого проекта, который ссылается на мой проект), мне нужно создать цель, которая выполняется до GetCopyToOutputDirectoryItems и добавьте полный путь к файлам скомпилированного содержимого в группу элементов AllItemsFullPathWithTargetPath. MSBuild вызывает GetCopyToOutputDirectoryItems для проектов, от которых зависит текущий проект, и использует результирующий список файлов для определения файлов, которые копируются вместе с assembly.dll. Вот XML из моего .csproj, на случай, если у кого-то еще есть подобная проблема.
У меня есть пользовательская задача под названием "ZipDictionary", и я накапливаю все файлы, которые собираюсь скомпилировать, в ItemGroup под названием DictionaryCompile. Моя цель «FixGetCopyToOutputDirectoryItems» выполняется перед «GetCopyToOutputDirectoryItems». Я не делаю там фактической компиляции, так как эта цель может вызываться несколько раз, ссылаясь на проекты, и это ухудшит производительность. Цель выполняет некоторые преобразования, чтобы получить имена файлов после компиляции, а затем возвращает полные пути ко всем файлам, поскольку относительные пути не будут работать при вызове copy из ссылочного проекта.
<ItemGroup>
<DictionaryCompile Include="Dictionaries\it-IT.dic">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</DictionaryCompile>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<UsingTask TaskName="ZipDictionary" AssemblyFile="..\LogicTree.DictionaryCompiler\bin\Debug\LogicTree.DictionaryCompiler.dll"/>
<Target Name="BeforeCompile">
<Message Text="Files @(DictionaryCompile)" Importance="high" />
<ZipDictionary DictionaryFiles="@(DictionaryCompile)" OutputDirectory="$(OutputPath)">
<Output TaskParameter="OutputFiles" ItemName="DictionaryOutputFiles" />
</ZipDictionary>
</Target>
<Target Name="FixGetCopyToOutputDirectoryItems" BeforeTargets="GetCopyToOutputDirectoryItems">
<ItemGroup>
<_DictionaryCompile Include="@(DictionaryCompile->'$(OutputPath)Dictionaries\%(FileName).ltdic')" />
</ItemGroup>
<AssignTargetPath Files="@(_DictionaryCompile)" RootFolder="$(MSBuildProjectDirectory)\$(OutputPath)">
<Output TaskParameter="AssignedFiles" ItemName="_DictionaryCompileWithTargetPath" />
</AssignTargetPath>
<ItemGroup>
<AllItemsFullPathWithTargetPath Include="@(_DictionaryCompileWithTargetPath->'%(FullPath)')" Condition="'%(_DictionaryCompileWithTargetPath.CopyToOutputDirectory)'=='Always' or '%(_DictionaryCompileWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'" />
<_SourceItemsToCopyToOutputDirectoryAlways Include="@(_DictionaryCompileWithTargetPath->'%(FullPath)')" Condition="'%(_DictionaryCompileWithTargetPath.CopyToOutputDirectory)'=='Always'" />
<_SourceItemsToCopyToOutputDirectory Include="@(_DictionaryCompileWithTargetPath->'%(FullPath)')" Condition="'%(_DictionaryCompileWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'" />
</ItemGroup>
</Target>