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

时间:2017-07-17 16:27:28

标签: c# reflection compilation cil

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

  

有没有办法在已编译的二进制文件中修改这些字符串?也许作为一个构建步骤来删除" C:\ Users \ MyName \ Projects \",但是留下余数用于记录目的?

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

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

1 个答案:

答案 0 :(得分:2)

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

在您的特定情况下,您可以将RequestToken()添加到.csproj文件中。这样做意味着<PathMap>C:\Users\MyName\Projects\Project=Project</PathMap>将为您提供[CallerFilePath]而不是整条路径。