2014-05-02 181 views
0

在MSBuild項目文件,我要採取以下變量:如何獲取MSBuild項目文件中的文件夾名稱?

$(MSBuildProjectDirectory) 

等於:

c:\projects\myproject\branches\changenumber\soapservice 

,創造這個變量:

$(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> 

如何設置一個MSBuild變量是等價的:

string MSBuildProjectDirectory = Path.GetFileName(Path.GetDirectoryName(bob)); 

回答

1

首先,你需要一個共同的分支屬性文件,說「Branch.Props」,然後將它放在c:\ projects \ myproject \ branches \ changenumber \ branch.props中。 然後添加常用的MSBuild屬性這個文件,如:

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

然後因爲你欣賞的MSBuild保留的名稱,你在所有未用「的MSBuild」爲前綴的解決方案項目,創建一個新的屬性:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <BranchRoot>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory) ,Branch.Props))</BranchRoot> 
    </PropertyGroup> 
    <Import Project="$(BranchRoot)\Branch.props" /> 
... 
+0

非常感謝您,可悲的是,您似乎無法真正地創建一個動態的IISUrl,該字符串會按原樣使用。但是,瞭解構建到MSBuild中的所有功能仍然非常有用。 – RoboJ1M

相關問題