Как удалить полный путь к файлу из 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
файлы, которые создаются компилятором. Единственный способ изменить это - построить свой проект в каком-то другом месте, предпочтительно где-то рядом с сервером сборки.