如何在Visual Studio输出路径及配置中使用$(ProjectName)等宏?
解决Visual Studio输出路径中$(ProjectName)宏不生效的方案
方案1:直接编辑项目文件并规避VS属性页干扰
用文本编辑器(如Notepad++、VS内置的“编辑项目文件”功能)打开项目文件(.csproj/.vbproj等),将<OutputPath>节点修改为:
<OutputPath>..\bin\$(Configuration)\Plugins\$(ProjectName)\</OutputPath>
保存后重新加载项目,不要通过VS的属性页修改该路径——属性页UI存在编码bug,会把$(ProjectName)转义成%24%28ProjectName%29,导致宏失效。
方案2:自定义属性替代原生宏
在项目文件的<PropertyGroup>节点中先定义一个自定义属性,再引用到输出路径里:
<PropertyGroup> <CustomProjectName>$(ProjectName)</CustomProjectName> <OutputPath>..\bin\$(Configuration)\Plugins\$(CustomProjectName)\</OutputPath> </PropertyGroup>
自定义属性的解析逻辑更直接,能绕开VS对原生$(ProjectName)宏的错误编码问题。
方案3:用Directory.Build.props统一配置(多项目场景)
如果是解决方案下多个项目需要相同配置,在解决方案根目录创建Directory.Build.props文件,内容如下:
<Project> <PropertyGroup> <OutputPath>..\bin\$(Configuration)\Plugins\$(ProjectName)\</OutputPath> </PropertyGroup> </Project>
所有子项目会自动继承该配置,且这种方式直接通过MSBuild引擎处理宏,完全避开VS属性页的编码干扰。
补充说明
$(Configuration)能正常生效,是因为VS属性页对这个常用宏的处理逻辑特殊,不会进行URL编码;而$(ProjectName)属于使用频率较低的宏,UI层的处理存在bug,导致保存时被转义。上述方案均通过MSBuild原生配置逻辑处理,规避了VS属性页的问题。
内容的提问来源于stack exchange,提问作者Piglet
相关产品推荐
相关产品推荐

