【发布时间】:2019-01-31 06:41:27
【问题描述】:
我有一个类库,它有几个依赖的文件,并且必须将这些文件打包以便与任何依赖此库的项目一起部署。现在这意味着除了将库添加为 MSBuild PrjectReference 之外,我还必须自定义每个依赖项目以确保它们复制文件。添加更多文件时,必须更新所有项目。
我一直在通过 Microsoft.Common.targets 寻找一种将这些文件包含在库自己的项目文件的输出中的方法,因此任何对库具有 ProjectReference 的项目都会在构建时自动获取文件.我还没有任何工作,但如果这可能的话,我会更普遍地好奇。看起来应该是这样,_CopyFilesMarkedCopyLocal 目标甚至尊重其他未使用的 %(DestinationSubDirectory) 元数据项,它允许自定义放置这些文件,这将是完美的。
我相信我缺少的是,对于构建依赖于项目 B 的项目 A,将项目 B 的项目输出添加到项目 A 的构建项目中的部分。
编辑:Leo 的评论,我没有注意到标有 CopyToOutputDirectory 的文件也被复制到依赖的项目输出目录,因为我们使用的 ItemGroups 名称不是 Content、EmbeddedResource、None 等。更深层次,使用这些的目标是 GetCopyToOutputDirectoryItems,它似乎递归调用 MSBuild 任务来确定项目输出,所以我应该能够定义一些可以导入到我们的项目中的自定义目标,在 GetCopyToOutputDirectoryItems 目标中添加我们的自定义 ItemGroups , 这样我们就不必使用 Content/None 等了。
但是,执行复制的目标是 _CopyOutOfDateSourceItemsToOutputDirectoryAlways,不幸的是它不尊重 %(DestinationSubDirectory),因此所有这些文件都直接复制到 $(OutDir)。
我的新目标是查看是否有某种方法可以将自定义文件添加到依赖项目的 ReferenceCopyLocalPaths ItemGroup 中,以便它们被 _CopyFilesMarkedCopyLocal 目标复制,该目标确实使用 %(DestinationSubDirectory)。
【问题讨论】:
-
现在没时间检查,但您不能从 _CopyFilesMarkedCopyLocal 追溯负责列出要复制的文件的目标吗?我相当确定有一种方法可以挂钩,以从引用的项目中复制任意文件。
-
为那些附加文件设置属性复制到输出目录 不适合您?如果将该属性设置为 Copy Always,MSBuild 会将其复制到输出目录,并且任何具有库的 ProjectReference 的项目都会在执行构建时自动获取输出文件夹中的文件。跨度>
-
有趣!我已经用新信息编辑了 OP。
-
@bwerks,这个问题有什么更新吗?你解决了这个问题吗?如果没有,请告诉我有关此问题的最新信息吗?
标签: msbuild visual-studio-2017 msbuild-15 msbuild-projectreference