0

以下のYSODでは、スタックトレース(およびソースファイル行)にソースファイルへのフルパスが含まれています。残念ながら、ソースファイル名へのフルパスには私のユーザー名が含まれています。これはfirstname.lastnameです。

YSODと、ファイル名と行番号を含むスタックトレース(デモおよびテストシステム)を保持したいのですが、ユーザー名はソースファイルパスから消えるはずです。ファイルのパスを確認することもできますが、ソリューションのルートディレクトリでパスを切り捨てる必要があります。

(ソリューションを公開する前に、毎回別のパスにソリューションをコピーして貼り付ける必要はありません...)

これを達成する方法はありますか?

注:カスタムエラーページはオプションではありません。

ここに画像の説明を入力してください

4

2 に答える 2

1

.pdbパスは、コンパイラによって生成されるファイルに埋め込まれます。これを変更する唯一の方法は、プロジェクトを他の場所、できればビルドサーバーの近くにビルドすることです。

于 2012-09-04T14:30:43.980 に答える
0

気にしないで、私はそれを自分で見つけました。
パスがpdbファイルにあるというAntonGogolevの声明のおかげで、私はそれが可能であることに気づきました。

pdbファイルでバイナリ検索と置換を実行し、ユーザー名を別のものに置き換えることができます。

私はすぐにこれを使ってみました:
https
://codereview.stackexchange.com/questions/3226/replace-sequence-of-strings-in-binary-file そしてそれは(pdbファイルの50%で)機能しました。リンクのコードスニペットはバグがあるようです。

しかし、この概念は機能しているようです。

私は今このコードを使用しています:

    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「ポルターガイスト」など、同じように多くの文字を含むものに置き換えます。

今、私はバイナリ検索を実行し、ビルド後のアクションとして置き換える方法を理解する必要があるだけです。

于 2012-09-04T15:15:14.393 に答える