$(ProjectName)和$(TargetName) MSBuild宏不工作

本文关键字:工作 ProjectName TargetName MSBuild | 更新日期: 2023-09-27 18:17:44

我使用的是Visual studio 2015 Community Edition。我已经加载了一个c#项目,并希望将其配置为使用影子构建,以便源文件不会与任何二进制文件或中间构建文件混淆。尝试使用VS UI设置c#项目的[output]/[intermediate output]目录路径-唯一可编辑的UI输出路径是"bin"路径,它不接受MSBuild宏。然后我已经卸载了项目并手动编辑了它。同时设置IntermediateOutputPath,当使用c#项目时,它在VS UI中不可用,但当使用c++项目时,所有这类目录都是可编辑的。目前,OutputPath被设置为:<OutputPath>$(SolutionDir)..'build_$(SolutionName)_$(Configuration)_$(Platform)'$(ProjectName)</OutputPath>

$(ProjectName)由于某种原因是空的。尝试$(TargetName)(使用它是不正确的,但只是为了测试),但它是空的,也是。有什么建议吗?

$(ProjectName)和$(TargetName) MSBuild宏不工作

不要尝试像其他答案中建议的那样导入Microsoft.CSharp.targets。首先,它会导致额外的警告,如

Warning MSB4011: "Microsoft.CSharp.targets" cannot be imported again. ...

但除此之外,如果你试图编辑前/后构建Visual studio将崩溃。(在Visual studio 2019, 16.7.7版本中观察)

最好使用$(MSBuildProjectName)宏而不是$(ProjectName) -工作原理相同。

问题是一些MSBuild属性,如ProjectName,是在.csproj文件的以下行之后设置的。

<Import Project="$(MSBuildBinPath)'Microsoft.CSharp.targets" />

在这行之后你可以访问所有的变量