Msbuild from命令行不复制不在';不需要编译到输出目录
在我的项目(一个XNA.contentproj)中,我有需要编译的文件,以及只需要复制到输出目录的文件:Msbuild from命令行不复制不在';不需要编译到输出目录,msbuild,Msbuild,在我的项目(一个XNA.contentproj)中,我有需要编译的文件,以及只需要复制到输出目录的文件: <Compile Include="Foo.cs" /> <None Include="Bar.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> 保存最新 当我从VisualStudio
<Compile Include="Foo.cs" />
<None Include="Bar.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
保存最新
当我从VisualStudio编译时,这很好,但是当我从命令行构建项目时,这些“无”文件不会复制到输出目录。我也试着将副本设置为“始终”
我如何告诉msbuild它应该这样做
编辑:我发现这只适用于XNA.contenproj msbuild文件。可能我缺少一些msbuild参数
EDIT2:我现在已经解决了这个问题,只需手动将所有非构建内容复制到输出目录。这样做很好,但仍然感觉“不对”
<None Include="Bar.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
总是
(如果您更改VS中的属性,它应该会这样做)。这很可能是因为XNA项目的特定目标定义(一般或您的特定目标定义)。 “无”项在任何方面都不是特别的,它们被视为与任何其他项一样,从某种意义上说,除非有一个特定的任务实际处理它们,否则它们不会产生任何效果。通用目标文件-例如Microsoft.CSharp.targets;Microsoft.Cpp.targets-请按照文档记录的正确方式处理“无”项 一种可能性是,已经定义了一个复制项目文件中“无”项的目标,但该目标不包括在项目文件的“项目”节点的DefaultTargets属性中。如果是这样,您仍然可以通过在命令行参数中传递该目标来调用它 另一个(不太可能的)选择是VS正在正确处理这些项目,即使在您的项目中没有定义正确的目标。有几种方法可以解决此问题:
如果您需要选择其中一个,我的建议是使用#1。它简单明了,副作用最小。Hmm好的,我把copytooutputdirectory设置为preservenest,这不起作用。我将尝试设置为“始终”。不幸的是,这也不起作用。对不起,我应该在我的问题中指定这一点。要调试VS和命令行之间的差异,您可以执行“tools\option\projects&solutions\build&run”并将详细程度设置为diagnostic,然后与命令行上的
/v:diag
进行比较(两者不同),假设VS正在设置一些属性,您也可以使用/p:name=val
在命令行上设置这些属性。
<Target Name="CopyNoneItems">
<Copy SourceFiles="@(None)"
DestinationFolder="$(OutputPath)" />
</Target>