在C#中使用[CallerFilePath]
属性会导致在已编译的CIL二进制文件中包含完整的本地文件路径,例如C:\Users\MyName\Projects\Project\File.cs
。
有没有办法在已编译的二进制文件中修改这些字符串?也许作为一个构建步骤来删除" C:\ Users \ MyName \ Projects \",但是留下余数用于记录目的?
在我的脑海中,我只能想到ildasm
&#39},搜索&替换,然后ilasm
它 - 但这似乎是一个相当复杂的过程。我还遇到了对STRINGTABLE
资源的引用,但没有关于如何对其进行后处理的任何实现细节。
有一些建议的重复项,包括this one,但我不认为这是一个重复的问题,因为这个问题具体指的是[CallerFilePath]
属性,而不是调试 - 配置相关的字符串,指向pdb
个文件。
答案 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]
而不是整条路径。