在 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
资源的引用,但没有关于如何对其进行后处理的任何实现细节。
有几个建议的重复项,包括 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
而不是整个路径。
关于C# 从已编译的二进制文件中删除/修改个人文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45149243/