C# Remove/Amend 来自已编译二进制文件的个人文件路径

C# Remove/Amend Personal File Paths From Compiled Binaries

在 C# 中使用 [CallerFilePath] 属性会导致在编译的 CIL 二进制文件中包含完整的本地文件路径,例如 C:\Users\MyName\Projects\Project\File.cs.

Is there a way of amending these strings in the compiled binaries? Perhaps as a build step to remove the "C:\Users\MyName\Projects\", but leave the remainder for logging purposes?

在我的脑海中,我只能想到 ildasm 对其进行搜索和替换,然后 ilasm 对它进行操作 - 但这似乎是一个相当复杂的过程。我还遇到了对 STRINGTABLE 资源的引用,但没有关于如何 post 处理它的任何实现细节。

有一些重复的建议,包括 this one,但我不认为这是一个重复的问题,因为这个问题专门指的是 [CallerFilePath] 属性,而不是调试 -指向 pdb 个文件的配置相关字符串。

您可以使用 the pathMap option for this。自 Roslyn 1.1 和 VS 2015 Update 1 以来它应该可用,尽管目前没有记录。

在您的特定情况下,您可以将 <PathMap>C:\Users\MyName\Projects\Project=Project</PathMap> 添加到您的 .csproj 文件中。这样做意味着 [CallerFilePath] 会给你 Project\File.cs 而不是整个路径。