发布后脚本

时间:2019-05-06 12:29:48

标签: msbuild visual-studio-2017 projects-and-solutions csproj solution

我使用 VS2017 作为解决方案。

我在bitbucket中有一个主存储库(例如,目录名称为 A ),并且子树形式的依赖项很少(位于 A 文件夹中,其他子文件夹说< strong> B )。

我想在所有子树( B 中的项目)中添加一个 post build ,以便如果子树项目位于文件夹 A 下>(在这种情况下),然后将dll从 B的 bin文件夹复制到 A 中的文件夹。但是,如果子树项目位于主目录中,则此脚本不应运行。

所以解决,我想找出文件夹 B 的父目录。如果此父目录为 A ,则仅将dll从 B / din / .dll复制到 A / Assembles / bin / .dll

在VS2017中的发布脚本中,如何从 B的父文件夹中找到 A

1 个答案:

答案 0 :(得分:1)

在条件下运行构建后事件

因此,您只想在特定情况下运行PostBuild事件。为此,您可以使用Condition

在您的Condition中,您要检查 Solution Project 目录的父级文件夹(老实说,我不确定你的意思)。

MSBuild获取dir的父级

如何获取父目录?

<PropertyGroup>
    <ProjectParentDir>$([System.IO.Path]::GetDirectoryName($(ProjectDir))))</ProjectParentDir>
    <SolutionParentDir>$([System.IO.Path]::GetDirectoryName($(SolutionDir)))</SolutionParentDir>
</PropertyGroup>

答案

因此,现在您可以结合以上知识:

<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="$(ProjectParentDir.EndsWith('A'))">
    // Do your post build
</Target>

评论

因为我认为您的问题可能是错误的,也许您可​​以在没有PostBuild的情况下实现解决方案,所以我认为您可以使用上述工具来控制OutputPath本身。

<PropertyGroup>
    <ProjectParentDir>$([System.IO.Path]::GetDirectoryName($(ProjectDir))))</ProjectParentDir>
</PropertyGroup>

<PropertyGroup Condition="$(ProjectParentDir.EndsWith('A'))">
    <OutputPath>Path/to/somewhere</OutputPath>
</PropertyGroup>
<PropertyGroup Condition="!$(ProjectParentDir.EndsWith('A'))">
    <OutputPath>Path/to/somewhere</OutputPath>
</PropertyGroup>

了解更多

我不确定我的语法是否正确,请阅读更多信息: