Visual Studio 命令行上的 MSBuild

问题描述 投票:0回答:6

我正在尝试使用构建后构建事件在 .sln 上调用 msbuild

类似:

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

我可以只用一行来做吗?基本上我想要这样的东西:

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

我怎样才能做到这一点?

visual-studio msbuild
6个回答
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
投票

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

您可以:

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

0
投票

您可以在正在构建的项目中添加构建后事件来执行复制。


0
投票

您的构建后事件是命名配置构建的一部分 - 因此它将作为项目/配置构建的一部分执行。

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

也许我误解了你的问题。

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


0
投票

不。添加构建后事件将成为正在构建的项目文件的一部分。我不知道如何将副本添加到命令行末尾。

您可以在正在构建的项目中添加构建后事件来执行复制。


0
投票

我在休闲谷

             Sandeep

扫描下面的条形码或使用上面的密码 支付状态 订单已拍下

Total            160
© www.soinside.com 2019 - 2024. All rights reserved.