如何获取当前msbuild文件的路径?
我正在编写一个msbuild.targets文件,我想在其中使用zip任务来压缩一些我知道相对于.targets文件的位置的文件 当我直接执行.target文件时,这工作正常。但是,当我将.targets文件包含在另一个目录中的.proj文件中时,相对路径将相对于.proj文件而不是.targets文件进行解析 有没有一种方法可以指定与我写入的文件相关的相对路径如何获取当前msbuild文件的路径?,msbuild,Msbuild,我正在编写一个msbuild.targets文件,我想在其中使用zip任务来压缩一些我知道相对于.targets文件的位置的文件 当我直接执行.target文件时,这工作正常。但是,当我将.targets文件包含在另一个目录中的.proj文件中时,相对路径将相对于.proj文件而不是.targets文件进行解析 有没有一种方法可以指定与我写入的文件相关的相对路径 我看到了这个相关的问题: 我想到的一个解决方法是执行以下操作。我还没试过。这行得通吗,有更好的办法吗 我的项目 <Impo
我看到了这个相关的问题:
我想到的一个解决方法是执行以下操作。我还没试过。这行得通吗,有更好的办法吗 我的项目
<Import Project="..\Somewhere\my.targets"/>
<PropertyGroup>
<MyTargetsYouAreHere>$(MSBuildProjectDirectory)\..\Somewhere</MyTargetsYouAreHere>
</PropertyGroup>
$(MSBuildProjectDirectory)\..\
我的目标
<Message Text="my.targets is here '$(MyTargetsYouAreHere)'" />
处理文件时,MSBuild的工作方式是读取所有文件,并为所有这些文件创建一个内存表示形式。这一切都发生在执行任何目标之前。因此,当目标执行时,它不知道它包含在什么文件中。基本上,您将无法在.targets文件中使用相对路径。处理这种情况的方法是确保外围.proj文件(或使用的任何扩展名)声明.targets文件用于解析共享文件的完整路径的已知属性 比如说 样本。目标
<Project ...>
<Target Name="ExecTool">
<Exec Command="$(YourToolPath)tool.exe" />
</Target>
</Project>
Build.proj
<Project ...>
<PropertyGroup>
<YourToolPath>$(MSBuildProjectDirectory)\..\</YourToolPath>
</PropertyGroup>
<Import Project="..\..\..\Sample.targets"/>
</Project>
$(MSBuildProjectDirectory)\\
在一个相关的笔记中,我在我的博客上讨论了验证这些“共享”属性
MSBuild v。4.0及以上
如果您使用的是MSBuild 4.0(或更高版本),即Visual Studio 2010/.NET 4.0(也可以针对.NET 2.0/3.0/3.5)。现在,您有了可用于此特定目的的:
MSBuildThisFile
MSBuildThisFileDirectory
MSBuildThisFileDirectoryNoRoot