【问题标题】:How can I use project macros in TFS 2015 vNext Build definination?如何在 TFS 2015 vNext Build 定义中使用项目宏?
【发布时间】:2016-08-26 10:37:54
【问题描述】:

我想在 vNext Build 定义中使用当前 csproj 的宏,例如 ${TargetPath} $(TargetName),作为 MSBuild 参数的 vs build 任务属性的一部分,进行一些复制等。

但我发现它不起作用,在构建日志中,宏没有更改为绝对路径。

有没有办法像在 csproj post-build 事件中一样使用这些宏?我在 msdn 上没有找到关于这个的描述,我不能在每个 csproj 中使用它,因为我们有超过一千个项目文件,prj文件一个一个编辑不好:(

非常感谢您的帮助。

更新

我希望每个项目在构建时只输出自己的程序集,没有任何引用的程序集。但是我无法更改项目文件以将引用属性“复制本地”修改为 false。

【问题讨论】:

  • 带有 ${TargetPath} $(TargetName) 的宏的用途是什么?是不是和msdn链接一样:msdn.microsoft.com/en-us/library/c02as0cs.aspx?如果是这样,为什么要在 MSBuild 参数中使用它而不是在项目的属性页中?
  • @Patrick-MSFT 感谢您的帮助。是的,我提到的宏与您的链接相同。我在构建任务配置而不是项目属性页面中使用它,因为我们的系统中有一些参考规则。我们将每个模块分为接口和实现,我们将它们设置为差异项目中,模块之间只能引用接口组件。构建时,我们将它们输出到 diff dir,如果引用其他实现,构建将失败。我使用 ${TargetPath} 将当前 csproj 的 dll 复制到正确的目录中,但没有包含引用的其他 dll。

标签: tfs msbuild macros tfs-2015


【解决方案1】:

您只需将其添加为 MSBuild 参数:

【讨论】:

  • 谢谢,但是 TargetPath 和 Output Path 有什么不同呢?它是否将所有引用的程序集复制到此 Targetpath?
  • @Allen 将引用添加到项目时,将引用的“Copy Local”属性设置为“True”,然后它将在构建期间被复制。
  • 非常感谢。你提到的“复制本地”的属性不是我想要的。因为在develop's environment和build env.Developer的本地环境之间存在差异,输出路径作为单元测试路径,他们需要copy local为true。但在build Agent env中,构建结果需要此属性为false。
【解决方案2】:

如果您的意思是要在构建后事件中实现与此问题Visual Studio Post Build Event - Copy to Relative Directory Location 相同的功能。 vnext build 中没有 post-build 之类的东西。

您可以添加几个步骤来复制程序集(一个项目的一个步骤)并在步骤中指定复制根。参考这个问题Copy one file in target directory on deploy from visual studio team services 但是,正如您所提到的,有上千个项目文件。您可以创建一个 powershell 脚本并将其添加到构建定义中以复制文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-23
    • 2016-10-03
    • 2016-08-07
    • 2016-08-05
    • 2016-05-17
    • 2018-02-03
    • 2017-07-12
    • 1970-01-01
    相关资源
    最近更新 更多