C# 从已编译的二进制文件中删除/修改个人文件路径

标签 c# reflection compilation cil

在 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/

相关文章:

JAVA:当我尝试访问另一个类文件时,为什么总是收到错误:找不到符号?

delphi - 了解代码是使用 Lazarus 还是 Delphi 编译的

c# - 无法从派生自 ActionFilterAttribute 的类访问存储库(或 DbContext)

c# - 如何在 MVC 中绑定(bind) List<string>?

c# - 按名称调用属性

c# - 列出使用 Mono.Cecil 调用方法的所有引用

compiler-construction - 如何将源代码转换为 1's and 0' s?

c# - NEST 5.5属性映射和自定义JsonConverter不起作用

c# - 使用方法 (C#) 初始化常量变量

java - 使用反射调用类中的所有 setter