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

jor*_*ane 6 .net msbuild assemblies visual-studio pdb

当我在 Visual Studio 中将 C# 项目构建为发行版时,生成的 .exe 包含以下字符串:

\n
C:\\Users\\jornane\\source\\repos\\\xc2\xabsolution\xc2\xbb\\\xc2\xabproject\xc2\xbb\\obj\\Release\\\xc2\xabname\xc2\xbb.pdb\n
Run Code Online (Sandbox Code Playgroud)\n

.exe 文件泄露了我的用户名和存储项目的路径。有什么办法可以防止这种情况发生吗?我理解为什么该路径适用于调试版本,但不适用于发布版本。

\n

dxi*_*xiv 4

可以使用-pathmap编译器选项替换存储的 PDB 路径,例如以下生成的\xc2\xabname\xc2\xbb.exePDB 路径存储为.\\\xc2\xabname\xc2\xbb.pdb,而不是使用完整路径。

\n
C:\\Users\\\xc2\xabuser\xc2\xbb\\source\\repos\\\xc2\xabsolution\xc2\xbb\\\xc2\xabproject\xc2\xbb>csc -debug -pathmap:"%cd%=." \xc2\xabname\xc2\xbb.cs\n
Run Code Online (Sandbox Code Playgroud)\n

-pathmap选项未在 IDE 中公开,但可以.csproj通过在文件末尾附近添加以下内容直接设置到文件中。

\n
<Project>\n<!-- ... -->\n  <Import Project="$(MSBuildToolsPath)\\Microsoft.CSharp.targets" />\n  <PropertyGroup>\n    <!-- after \'Microsoft.CSharp.targets\' for \'IntermediateOutputPath\' to be defined -->\n    <PathMap>$(MSBuildProjectDirectory)\\$(IntermediateOutputPath)=.</PathMap>\n  </PropertyGroup>\n</Project>\n
Run Code Online (Sandbox Code Playgroud)\n

替换<PathMap><PathMap Condition="\'$(Configuration)\'==\'Release\'">仅适用于发布版本的选项。

\n

注意".":替换路径在上面的示例中设置为,因为csc不允许它为空 ( error CS8101: The pathmap option was incorrectly formatted)。.任何其他非空用户定义字符串也可以代替。

\n