您可以,但不能使用“内容”。这取决于项目任务,但您可以破解大多数内置任务,不值得麻烦或副作用。
有一个基本的陈旧路径来处理这个问题:) 如果您正在使用 .Net,这也可以避免讨厌的 PostBuild cmd shell 方式,并使用实际的构建过程。
我没有看到任何其他类似的答案,我认为这是 OPs 问题的核心所在。这是核心概念,也是最短路径,除了找到具有“相对于输出路径”路径参数且没有副作用的项目类型。
1) 后期处理风格:
<ItemGroup>
...
<MyTargets Include="test.stl"/>
...
</ItemGroup>
然后在底部(使用您之后的任何路径):
<PropertyGroup>
<MyDeployDir>$(SolutionDir)$(Configuration)</MyDeployDir>
<MyOtherDeployDir>$(SolutionDir)$(Configuration)\Templates</MyDeployDir>
</PropertGroup>
那么您的现有 MS 版本包括(不要添加这个,这里是作为标记):
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
然后是“构建后”:
<Target Name="AfterBuild">
<Copy SourceFiles="@(MyTargets)" DestinationFolder="$(MyDeployDir)" SkipUnchangedFiles="true" />
<Copy SourceFiles="@(MyOtherTargets)" DestinationFolder="$(MyOtherDeployDir)" SkipUnchangedFiles="true" />
<Copy SourceFiles="@(MyTargets2)" DestinationFolder="$(MyDeployDir)\IHeardYourMomLikesGrapeNuts" SkipUnchangedFiles="true" />
</Target>
根本问题是项目项目默认情况下不做任何事情,它们的类型类似于“内容”或“我的目标”。它的那些类型说会发生什么。您可能能够找到包含所需内容的任务、类型或构建脚本,但就构建期间该文件将发生的情况而言,项目组中的项目没有任何内在特征。以上是特制“任务”的力量之间的平衡,但没有任何麻烦。
添加后
<ItemGroup>
<MyOutFiles Include="xxx.xxx" />
对项目文件进行一次,然后它将出现在任何文件的 BuildAction 列表中,您可以在其中对任何文件进行设置,而无需手动编辑项目文件。
2) 一步到位
在更高版本的 MSBuild 中,您可以在“AfterBuild”目标中嵌入一个“ItemGroup”,然后执行上述操作或执行其他花哨的操作,而无需触及文件的其余部分。例如,这允许使用简单的 Include 获取构建结果并将其替换到其他地方。这一切都不需要做任何 RoboCopy 或诉诸更复杂的构建目标函数处理。
<Target Name="AfterBuild">
<ItemGroup>
<MyOutFiles Include="$(OutDir)*.*" />
</ItemGroup>
<Copy SourceFiles="@(MyOutFiles)" DestinationFolder="$(SolutionDir)\Application" SkipUnchangedFiles="true" />
编辑(由于投反对票?,海报评论已被删除):
为了消除可能的方法的歧义并重申,此方法不使用 MSBuild“功能”或替代任务(如“RoboCopy”),而是旨在使用核心功能显示更纯粹的 MSBuild 风格,就像在制作项目任务时使用的那样“内容”本身。
问题是我可以为以下文件指定一个“不同的文件夹”吗?我可以为内容标签执行此操作吗?您可以使用 MSBuild 函数重新路由所有 BuildAction,但我不相信这是问题所在。
您可以做到这一点,如上所示,所以我认为这不会更复杂,并且更容易阅读。下面是简短的形式,让他可以创建自己的 BuildAction,可以随意处理。所以不,您不能告诉“内容”为标记为“内容”的特定文件选择另一个文件夹,但是您可以进行另一个相当容易的构建操作。您还可以将元信息注入到指示操作的 StlFiles 标记中,以便您可以在标记本身上设置它,或者像内容一样在过程的早期使用 StlFiles 挂钩,但这更复杂。
<StlFiles Include="test.stl" />
...
<Target Name="AfterBuild">
<Copy SourceFiles="@(StlFiles)" DestinationFolder="$(SolutionDir)\Release\MyTypes" SkipUnchangedFiles="true" />