在下面的YSOD中,stacktrace(和源文件行)包含源文件的完整路径。不幸的是,源文件名的完整路径包含我的用户名,即firstname.lastname
。
我想保留YSOD,以及包含文件名和行号的堆栈跟踪(它是演示和测试系统),但用户名应该从源文件路径中消失。查看文件的路径也没问题,但应该在解决方案根目录中截断路径。
(在发布之前,我不必每次都将解决方案复制粘贴到另一条路径上......)
有没有办法实现这个目标?
注意:自定义错误页面不是一个选项。
答案 0 :(得分:1)
路径嵌入在.pdb
文件中,这些文件由编译器生成。改变这种情况的唯一方法是在其他位置构建项目,最好是在构建服务器附近。
答案 1 :(得分:0)
没关系,我自己发现了。
感谢Anton Gogolev声明路径在pdb文件中,我意识到这是可能的。
可以在pdb文件上进行二进制搜索和替换,并用其他内容替换用户名。
我很快就尝试了这个:
https://codereview.stackexchange.com/questions/3226/replace-sequence-of-strings-in-binary-file
并且它工作(在50%的pdb文件上)。
所以请注意,链接中的代码片段似乎是错误的。
但这个概念似乎有效。
我现在使用此代码:
public static void SizeUnsafeReplaceTextInFile(string strPath, string strTextToSearch, string strTextToReplace)
{
byte[] baBuffer = System.IO.File.ReadAllBytes(strPath);
List<int> lsReplacePositions = new List<int>();
System.Text.Encoding enc = System.Text.Encoding.UTF8;
byte[] baSearchBytes = enc.GetBytes(strTextToSearch);
byte[] baReplaceBytes = enc.GetBytes(strTextToReplace);
var matches = SearchBytePattern(baSearchBytes, baBuffer, ref lsReplacePositions);
if (matches != 0)
{
foreach (var iReplacePosition in lsReplacePositions)
{
for (int i = 0; i < baReplaceBytes.Length; ++i)
{
baBuffer[iReplacePosition + i] = baReplaceBytes[i];
} // Next i
} // Next iReplacePosition
} // End if (matches != 0)
System.IO.File.WriteAllBytes(strPath, baBuffer);
Array.Clear(baBuffer, 0, baBuffer.Length);
Array.Clear(baSearchBytes, 0, baSearchBytes.Length);
Array.Clear(baReplaceBytes, 0, baReplaceBytes.Length);
baBuffer = null;
baSearchBytes = null;
baReplaceBytes = null;
} // End Sub ReplaceTextInFile
将firstname.lastname
替换为具有相同字符数的内容,例如“Poltergeist”。
现在我只需要弄清楚如何运行二进制搜索并将其替换为构建后的操作。