Как удалить полный путь к файлу из YSOD?

В приведенном ниже YSOD трассировка стека (и строка исходного файла) содержат полный путь к исходному файлу. К сожалению, полный путь к имени исходного файла содержит мое имя пользователя, которое firstname.lastname,

Я хочу сохранить YSOD, а также трассировку стека, включая имя файла и номер строки (это система для демонстрации и тестирования), но имя пользователя должно исчезнуть из пути исходного файла. Увидеть путь к файлу тоже нормально, но путь должен быть обрезан в корневом каталоге решения.

(без необходимости копировать-вставлять решение каждый раз по другому пути перед его публикацией...)

Есть ли способ сделать это?

Примечание. Пользовательские страницы ошибок не предусмотрены.

2 ответа

Решение

Неважно, я сам это выяснил.
Благодаря заявлению Антона Гоголева, что путь находится в файле 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 с чем-то, что имеет столько же символов, например, "Полтергейст".

Теперь мне нужно только выяснить, как запустить бинарный поиск и заменить как действие после сборки.

Путь встраивается в .pdb файлы, которые создаются компилятором. Единственный способ изменить это - построить свой проект в каком-то другом месте, предпочтительно где-то рядом с сервером сборки.

Другие вопросы по тегам