我知道有关MSBuild的最新书说这是不可能的,但我确信我已经看到了一个指向当前文件的属性。
有谁知道找到当前文件的方法? (即当主MSBuild文件导入辅助文件时。该文件中辅助文件的路径是什么。)
我正在尝试在HKEY_LOCALMACHINE \ Software \ Microsoft \ VisualStudio \ 8.0 \ MSBuild \ SafeImports中注册我的文件,但是文件的路径在我的每个同事计算机上都不是常量,而是从几个不同的项目中导入硬编码的相对路径也不是一个好主意。
如果有办法让当前工作目录也能正常工作(工作目录会随每次导入而切换,我想我可以将其保存起来)
答案 0 :(得分:4)
没有可靠的方法来识别“当前文件”。当MSBuild处理文件时,它可以导入其他几个文件,最终结果是单个内存完整的文件表示。当目标执行时,他们不知道他们在哪个文件中声明。
这就是可重用构建脚本必须“参数化”以接受已知相对位置的位置的原因。例如,如果您依赖于第三方引用的文件夹所在的位置,则驱动该进程的构建脚本必须为您声明该属性。
如果您使用的是 MSBuild 4.0 ,即Visual Studio 2010 / .NET 4.0(也可以是.NET 2.0 / 3.0 / 3.5)。然后,您现在拥有可用于此特定目的的这些属性:
MSBuildThisFile
MSBuildThisFileDirectory
MSBuildThisFileDirectoryNoRoot
Sayed Ibrahim Hashimi
我的书:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build
答案 1 :(得分:1)
在4.0+中,您可以使用$(MSBuildThisFile)等属性来完成此操作。见here