У меня есть библиотека классов, в которой есть несколько файлов, от которых она зависит, и эти файлы должны быть упакованы для развертывания в любом проекте, который зависит от этой библиотеки. Прямо сейчас это означает, что я должен настроить каждый из этих зависимых проектов, чтобы гарантировать, что они копируют файлы, в дополнение к добавлению библиотеки как MSBuild PrjectReference. Когда добавлено больше файлов, все проекты должны быть обновлены.
Я искал в Microsoft.Common.targets способ включения этих файлов в выходные данные собственного файла проекта библиотеки, поэтому любой проект, имеющий ссылку ProjectReference на библиотеку, будет автоматически получать файлы при выполнении сборки. , У меня еще ничего не получалось, но мне любопытнее, если это возможно. Похоже, что так и должно быть, и цель _CopyFilesMarkedCopyLocal даже учитывает неиспользуемый в противном случае элемент метаданных% (DestinationSubDirectory), который позволит настраивать размещение этих файлов, что было бы идеально.
Я полагаю, что мне не хватает, для построения проекта A, который зависит от проекта B, кусок, который добавляет выходные данные проекта B в элементы для сборки проекта A.
РЕДАКТИРОВАТЬ : комментарий Лео, я не заметил, что файлы, отмеченные CopyToOutputDirectory, также копируются в выходные каталоги зависимых проектов, потому что мы используем ItemGroups с именами, отличными от Content, EmbeddedResource, None и т. Д. Копаем глубже целевым объектом, который использует их, является GetCopyToOutputDirectoryItems, и он, кажется, рекурсивно вызывает задачу MSBuild для определения выходных данных проекта, поэтому я должен иметь возможность определить некоторую настраиваемую цель, которая может быть импортирована в наши проекты, которая добавляет наши пользовательские ItemGroups в цель GetCopyToOutputDirectoryItems, чтобы нам не приходилось использовать Content / None и т. д.
Однако цель, которая выполняет копирование - _CopyOutOfDateSourceItemsToOutputDirectoryAlways, к сожалению, не учитывающая% (DestinationSubDirectory), и поэтому все эти файлы копируются непосредственно в $ (OutDir).
Моя новая цель - выяснить, есть ли какой-нибудь способ добавить пользовательские файлы в ItemCopyLocalPaths ItemGroup зависимых проектов, чтобы они вместо этого копировались целью _CopyFilesMarkedCopyLocal, которая использует% (DestinationSubDirectory).