问题描述
当我在Visual Studio中将C#项目构建为发行版时,生成的.exe包含以下字符串:
C:\Users\jornane\source\repos\«solution»\«project»\obj\Release\«name».pdb
.exe文件泄漏了我的用户名和存储项目的路径。有什么方法可以防止这种情况发生吗?我知道为什么在调试版本中会有该路径,而对于发布版本却没有。
解决方法
可以使用-pathmap
编译器选项来替换存储的PDB路径,例如,以下代码使用存储为«name».exe
的PDB路径生成.\«name».pdb
,而不是使用完整路径
C:\Users\«user»\source\repos\«solution»\«project»>csc -debug -pathmap:"%cd%=." «name».cs
-pathmap
选项未在IDE中公开,但可以通过在文件末尾添加以下内容来直接将其设置到.csproj
文件中。
<Project>
<!-- ... -->
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<!-- after 'Microsoft.CSharp.targets' for 'IntermediateOutputPath' to be defined -->
<PathMap>$(MSBuildProjectDirectory)\$(IntermediateOutputPath)=.</PathMap>
</PropertyGroup>
</Project>
将<PathMap>
替换为<PathMap Condition="'$(Configuration)'=='Release'">
的选项仅适用于发布版本。
注意:在上述示例中,替换路径设置为"."
,因为csc
不允许将其保留为空(error CS8101: The pathmap option was incorrectly formatted
)。其他任何非空的用户定义字符串也可以代替.
。