0

在下面的 YSOD 中,堆栈跟踪(和源文件行)包含源文件的完整路径。不幸的是,源文件名的完整路径包含我的用户名,即firstname.lastname.

我想保留 YSOD 以及堆栈跟踪,包括文件名和行号(这是一个演示和测试系统),但用户名应该从源文件路径中消失。看文件的路径也是可以的,但是路径要在解决方案根目录下截断。

(在发布之前,我不必每次都将解决方案复制粘贴到另一条路径......)

有没有办法做到这一点?

注意:自定义错误页面不是一个选项。

在此处输入图像描述

4

2 回答 2

1

路径嵌入在.pdb编译器生成的文件中。改变这一点的唯一方法是在其他位置构建您的项目,最好是在构建服务器附近的某个地方。

于 2012-09-04T14:30:43.980 回答
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”。

现在我只需要弄清楚如何运行二进制搜索并将替换作为构建后操作。

于 2012-09-04T15:15:14.393 回答