如何获取$(MSBuildProjectDirectory)的最后一部分

如何获取$(MSBuildProjectDirectory)的最后一部分,msbuild,msbuild-task,msbuildcommunitytasks,Msbuild,Msbuild Task,Msbuildcommunitytasks,我不知道如何获取$(MSBuildProjectDirectory)的最后一部分 例如,如果值为“c:\development\projects\project\u branch”,那么我只需要最后一部分“project\u branch” 我该怎么做? <Project DefaultTargets="BuildAll" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Target Name

我不知道如何获取$(MSBuildProjectDirectory)的最后一部分

例如,如果值为“c:\development\projects\project\u branch”,那么我只需要最后一部分“project\u branch”

我该怎么做?


<Project DefaultTargets="BuildAll" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <Target Name="GetMSBuildProjectLocalDirectory">
        <CreateItem Include="$(MSBuildProjectDirectory)">
            <Output ItemName="MSBuildProjectDirectoryMeta" TaskParameter="Include"/>
        </CreateItem>
        <CreateProperty Value="%(MSBuildProjectDirectoryMeta.Filename)">
            <Output PropertyName="LocalDirectory" TaskParameter="Value"/>
        </CreateProperty>
    </Target>

    <Target Name="BuildAll" DependsOnTargets="GetMSBuildProjectLocalDirectory">
        <Message Text="$(LocalDirectory)" />
    </Target>

</Project>

在4.0+中,您可以使用属性函数在一行中完成此操作

例如,在这种情况下 $([System.IO.Path]::GetDirectoryName($(MSBuildProjectDirectory)))


或者您可以使用字符串函数。

在4.0+中,您可以使用属性函数在一行中完成此操作

例如,在这种情况下 $([System.IO.Path]::GetDirectoryName($(MSBuildProjectDirectory)))


或者可以使用字符串函数。

如果遵循最佳实践,则项目目录将与项目文件同名。因此,您应该能够使用:

$(MSBuildProjectName)

如果您遵循最佳实践,那么您的项目目录将与您的项目文件具有相同的名称。因此,您应该能够使用:

$(MSBuildProjectName)

您试图将此值用于什么?要将分支的二进制文件部署到按分支名称组织文件夹的位置。因此,不涉及subversion的最接近的东西似乎是我们的msbuild文件所在的文件夹名。我们有一个用于自动夜间生成的部署任务,因此目标是为分支添加一个部署任务。您试图将此值用于什么?要将分支的二进制文件部署到按分支名称组织文件夹的位置吗。因此,不涉及subversion的最接近的东西似乎是我们的msbuild文件所在的文件夹名。我们有一个用于自动夜间构建的部署任务,所以我们的目标是为分支添加一个部署任务。