防止Visual Studio泄漏已编译exe中的pdb路径

问题描述

当我在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)。其他任何非空的用户定义字符串也可以代替.

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...