Visual Studio项目模板构建时$(SolutionDir)宏被替换,如何转义?
解决项目模板中$(SolutionDir)宏被自动替换的问题
我之前也碰到过一模一样的情况——Visual Studio的模板引擎在打包、处理项目模板时,会自动解析并替换MSBuild宏,导致你原本想保留的$(SolutionDir)被替换成了模板构建时的临时路径。要搞定这个问题,只需要对宏做双美元符号转义就行。
具体解决方案
把原代码里的$(SolutionDir)替换成$$(SolutionDir),这样模板引擎处理时会把$$解析成单个$,生成后的项目文件里就能保留原本的MSBuild宏,而不会被替换成临时路径。
修改后的代码示例:
<ItemGroup> <Compile Include="$$(SolutionDir)\CommonAssemblyInfo.cs"> <Link>Properties\CommonAssemblyInfo.cs</Link> </Compile> <Compile Include="Properties\AssemblyInfo.cs" /> </ItemGroup>
原理说明
Visual Studio的模板系统会识别以单个$开头的变量并执行替换操作,当你用$$时,模板引擎会把它当成转义后的单个$,这样就能完整保留$(SolutionDir)这个MSBuild宏的原始形式,让生成后的项目可以正常引用解决方案根目录下的文件。
内容的提问来源于stack exchange,提问作者Julian Kopka Heerup
相关产品推荐
相关产品推荐

