Visual Studio命令行上的MSBuild

时间:2009-02-26 19:36:24

标签: visual-studio msbuild

我正在尝试使用post build build-event

在.sln上调用msbuild

类似的东西:

xcopy "$(TargetDir)$(TargetName)*" "C:\TEST\" /Y. 

我能在一行中做到吗???基本上我想要有类似的东西:

msbuild Solution.sln xcopy "$(TargetDir)$(TargetName)" "C:\TEST\" 

我该怎么做?

5 个答案:

答案 0 :(得分:3)

恕我直言,你最好直接编辑项目文件并将其添加到AfterBuild目标。这是我们在发布版本上复制程序集DLL,PDB和XML文件的示例:

<Target Name="AfterBuild">
  <CallTarget Targets="CopyFrameworkToTools" 
              Condition="'$(Configuration)' == 'Release'"/>
</Target>
<Target Name="CopyFrameworkToTools">
  <CreateItem Include="$(OutputPath)$(AssemblyName).*">
    <Output ItemName="ReleaseFiles" TaskParameter="Include" />
  </CreateItem>
  <Copy SourceFiles="@(ReleaseFiles)" DestinationFolder="..\Tools\" />
</Target>

您可以使用复制任务将其删除到一行,但我想表明集成到MSBuild可以为您提供更多的灵活性和控制。

答案 1 :(得分:1)

你不能这样做。无法从命令行指定要执行的任务。你唯一能做的就是指定目标。

你可以:

  • 将小型MSBuild项目文件写入您需要的任务。缺点:您无法在解决方案中引用其他项目的输出,因此您必须明确指定任何文件
  • 将post build事件添加到项目文件中(通过Visual Studio)。缺点:您必须修改项目,这可能并不总是可行。 (不,您不能从命令行注入该事件)此外,此事件仅作为常规构建的一部分执行。
  • 为项目文件添加单独的目标。与构建后事件相同的缺点。与post post build事件的不同之处在于,您可以将该目标明确指定给msbuild,并且它只执行其任务。缺点:与构建后事件相同。

答案 2 :(得分:0)

您可以在正在构建的项目中添加一个post build事件,该事件将进行复制。

答案 3 :(得分:0)

没有。添加post build事件将是正在构建的项目文件的一部分。我不知道如何将一个副本添加到命令行的末尾。

您可以在正在构建的项目中添加一个post build事件,该事件将进行复制。

答案 4 :(得分:0)

您的post build事件是namedconfiguration构建的一部分 - 因此它将作为project / config构建的一部分执行。

至少那是我从命令行运行MSBuild的经验。

也许我误解了你的问题。

也许如果你解释一下你想要做什么,我们可以想出办法解决问题 - 而不是试图回答你的具体实施......