Msbuild 在VS发布配置文件中获取解决方案目录
我有一个由来自不同路径的不同项目组成的解决方案。我们使用香草文件夹中的基础项目,然后从特定目录中指定特定项目。例如:Msbuild 在VS发布配置文件中获取解决方案目录,msbuild,visual-studio-2005,publish-profiles,Msbuild,Visual Studio 2005,Publish Profiles,我有一个由来自不同路径的不同项目组成的解决方案。我们使用香草文件夹中的基础项目,然后从特定目录中指定特定项目。例如: specific project directory: c:\proj\specific vanilla project directory: c:\proj\vanilla vanilla project x path: c:\proj\vanilla\repo\src\project\x\code\ 在每个香草项目中,我们都有一个指向根目录的发布配置文件,其中包括一个
specific project directory: c:\proj\specific
vanilla project directory: c:\proj\vanilla
vanilla project x path: c:\proj\vanilla\repo\src\project\x\code\
在每个香草项目中,我们都有一个指向根目录的发布配置文件,其中包括一个publishsettings.targets文件,该文件具有项目应该发布的实际目标。通过使用这种结构,我们可以拥有许多项目,并使用单个目标发布它们,因此我们不需要在所有项目中更改该目标
现在我们发现,在使用这些普通项目时出现了一个问题,因为发布概要文件中使用的路径是相对于普通目录的,实际上我们需要它相对于特定的项目目录(解决方案目录)
在我们的发布配置文件中,我们有:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\..\..\..\..\..\publishsettings.targets" />
<PropertyGroup>
...
</PropertyGroup>
</Project>
实际
Project="c:\proj\specific\publishsettings.targets"
通过使用一些msbuild或自定义变量而不是硬编码
我需要它既可以用于香草(因为我有一个香草.sln),也可以用于特定的项目(因为我有一个X.sln)。下面是一种方法,可以制作您希望看到的
MSBuildSolutionDirectory
的自己版本:
<PropertyGroup>
<SolutionDirectory>$([MSBuild]::GetDirectoryNameOfFileAbove(`$(MSBuildProjectDirectory)`, `YOUR_SOLUTION_NAME.sln`))\</SolutionDirectory>
</PropertyGroup>
$([MSBuild]::GetDirectoryNameOffileOver(`$(MSBuildProjectDirectory)`,`YOUR\u SOLUTION\u NAME.sln`)\
有关MSBuild属性函数的注释:
- 发件人:
$([MSBuild]::GetDirectoryNameOfFileAbove(目录,文件名)
Looks
在指定目录中,然后逐步在父目录中
目录,直到找到提供的文件或找到根目录
返回该根目录的路径
- 根据我自己的测试:
- 返回的路径不包含尾随的反斜杠
- 如果未找到文件名,则返回空字符串
<PropertyGroup>
<SolutionDirectory>$([MSBuild]::GetDirectoryNameOfFileAbove(`$(MSBuildProjectDirectory)`, `YOUR_SOLUTION_NAME.sln`))\</SolutionDirectory>
</PropertyGroup>