调查仅发生在我们的构建服务器上的构建问题,我很惊讶地看到这个答案指出同时存在
$(ProjectDir)
和 $(MSBuildProjectDir)
,前者有时不可用。
一般有什么区别?我是否应该始终使用
$(MSBuildXXX)
版本的属性(如果可用)?为什么首先使用 $(ProjectDir)
?
与其他问答中的建议相反,我有时会看到
$(MSBuildProjectDir) = ''
。
正如您链接的答案所说,
$(ProjectDir)
仅在导入Microsoft.Common.Targets
后才可用,而$(MSBuildProjectDirectory)
是MSBuild本身的保留属性:
MSBuildProjectDirectory:项目文件所在目录的绝对路径,例如C:\MyCompany\MyProduct。
请勿在此属性中包含最后的反斜杠。
示例:
C:\Source\Repos\ConsoleApp1\ConsoleApp1
因此,使用
$(MSBuildXXX)
属性将确保它们始终可供您使用,而无需导入所有必要的引用。
请注意,原始问题中提出的
$(MSBuildProjectDir)
现已被弃用。