如何在MSBuild项目文件中获取文件夹名称?

如何在MSBuild项目文件中获取文件夹名称?,msbuild,Msbuild,在MSBuild项目文件中,我希望采用以下变量: $(MSBuildProjectDirectory) $(MSBuildProjectDirectoryName) 这等于: c:\projects\myproject\branches\changenumber\soapservice 并创建此变量: $(MSBuildProjectDirectory) $(MSBuildProjectDirectoryName) 将其设置为: changenumber 我想在MSBuild项目文件

在MSBuild项目文件中,我希望采用以下变量:

$(MSBuildProjectDirectory)
$(MSBuildProjectDirectoryName)
这等于:

c:\projects\myproject\branches\changenumber\soapservice
并创建此变量:

$(MSBuildProjectDirectory)
$(MSBuildProjectDirectoryName)
将其设置为:

changenumber
我想在MSBuild项目文件中执行以下操作:

  <PropertyGroup>
    <LinqToXsdBinDir Condition="'$(LinqToXsdBinDir)' == ''">$(SolutionDir)..\LinqToXsd</LinqToXsdBinDir>
    <MSBuildProjectParentDirectoryName Condition="'$(MSBuildProjectDirectoryName)' == ''">Path.GetDirectoryName(Path.GetDirectory($(MSBuildProjectDirectory)))</MSBuildProjectParentDirectoryName>
    ***SNIP***
  </PropertyGroup>
  ***SNIP***
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
        <WebProjectProperties>
          <UseIIS>True</UseIIS>
          <IISUrl>http://localhost/ThisSoft/$(MSBuildProjectParentDirectoryName)/LayerName</IISUrl>
        </WebProjectProperties>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>

首先,获取一个公共分支属性文件,如“branch.Props”,并将其放置在c:\projects\myproject\branchs\changenumber\branch.Props。 然后将公共msbuild属性添加到此文件,例如:

<PropertyGroup>
    <LinqToXsdBinDir Condition="'$(LinqToXsdBinDir)' == ''">$(SolutionDir)..\LinqToXsd</LinqToXsdBinDir>
</PropertyGroup>

$(SolutionDir)…\LinqToXsd
然后,由于您喜欢使用MsBuild保留名称,因此可以在所有解决方案项目中创建一个不带前缀“MsBuild”的新属性:


$([MSBuild]::GetDirectoryNameOffileOver($(MSBuildProjectDirectory),Branch.Props))
...

非常感谢,遗憾的是,似乎您实际上无法创建动态IISUrl,字符串将按原样使用。但是,了解构建到MSBuild中的所有函数仍然非常有用。