【问题标题】:Msbuild from command line does not copy files that don't need compiling to the output directory命令行中的 msbuild 不会将不需要编译的文件复制到输出目录
【发布时间】:2011-04-26 15:35:39
【问题描述】:

在我的项目(一个 XNA .contentproj)中,我有需要编译的文件,以及只需要复制到输出目录的文件:

    <Compile Include="Foo.cs" />
    <None Include="Bar.xml">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>

当我从 Visual Studio 编译时,这工作正常,但是当我从 命令行 构建项目时,这些“无”文件不会复制到输出目录。我也尝试将副本设置为“始终”。

我如何告诉 msbuild 它应该这样做?

编辑:我发现这仅适用于 XNA .contenproj msbuild 文件。也许我缺少一些 msbuild 参数。

EDIT2:我现在通过手动将所有非构建内容复制到输出目录来解决这个问题。效果很好,但仍然感觉“错误”。

【问题讨论】:

  • 要调试VS和命令行的区别,你可以做“tools\option\projects&solutions\build&run”并将详细程度设置为诊断,并在命令行上与/v:diag比较(diff两个),大概 VS 正在设置一些属性,您也可以在命令行上使用/p:name=val 设置这些属性。

标签: msbuild


【解决方案1】:

就做吧,例如

<None Include="Bar.xml">
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>

(如果你改变了VS内部的属性,它应该这样做)。

【讨论】:

  • 嗯,好的,我将 CopyTuOutputDirectory 设置为 PreserveNewest,这不起作用。我会尝试设置为“始终”。
  • 不幸的是,这也不起作用。抱歉,我应该在我的问题中指定这一点。
【解决方案2】:

这很可能是因为 XNA 项目的特定目标定义(一般而言,或您的特定目标)。 “无”项目在任何方面都没有特殊,它们被视为与任何其他项目一样,除非有特定任务实际处理它们,否则它们不会有任何效果。通用目标文件 - 例如Microsoft.CSharp.targets; Microsoft.Cpp.targets - 按照here 记录的正确方式处理“无”项目。

一种可能性是,已经定义了一个复制项目文件中的 None 项的目标,但该目标不包含在项目文件的“项目”节点的 DefaultTargets 属性中。如果是这种情况,您仍然可以通过在/target 命令行参数中传递该目标来调用该目标。

另一个(不太可能)选项是 VS 正确处理这些项目,即使您的项目中没有定义适当的目标。有几种方法可以解决这个问题:

  1. 直接的方式 - 定义一个复制文件的目标并将其添加到默认目标中,或者使用 BeforeTargets/AfterTargets 将其放入目标链中。例如(参见“复制”任务的文档here):
  <Target Name="CopyNoneItems">
    <Copy SourceFiles="@(None)"
    DestinationFolder="$(OutputPath)" />
  </Target>
  1. hacky 方式 - 包含一个可以正确处理项目文件中的“无”项的目标文件(例如 Microsoft.CSharp.targets) - 这是 hacky,因为您正在导入一堆其他的东西过程中不需要,可能会引入其他问题

  2. 很长的路要走 - 解析 CSharp(或任何其他正确处理“无”项的项目类型)的目标文件,以查看哪个内部导入的目标文件处理“无”项,并且可能只导入那个文件。当我遇到问题时,我选择了 #1,所以我不确定是否有这样一个干净的 .targets 文件可以实际工作,因为所有这些目标文件之间可能存在一些依赖关系

如果您需要选择其中之一,我的建议是选择 #1。它简单直接,副作用最小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2011-08-20
    • 1970-01-01
    • 2014-04-24
    • 2015-12-14
    • 1970-01-01
    • 2017-03-10
    相关资源
    最近更新 更多