log4net.Util.SystemInfo bug? (その2)

log4net.Util.SystemInfo#ConvertToFullPathメソッドで返しているパスがおかしいぽい、って所までは解ったんだけど、二つのアセンブリに跨がる特殊なケースだし、フィードバックしても、期待できなそう。

先日言及した、log4netのFileAppenderを使う時の保存先のパスの生成に問題がある件だが、実行対象のアセンブリは互いにIPCの可能性があるので、違うAppDomainからお互いに起動しあう今回のケースはレアケースでは無い。なので、やはり自分の所で使う分には問題があるんでパッチをあてることにした。

public static string ConvertToFullPath(string path)
{
    if (path == null)
    {
        throw new ArgumentNullException("path");
    }
    string baseDirectory = "";
    try
    {
        string applicationBaseDirectory = SystemInfo.ApplicationBaseDirectory;
        if (applicationBaseDirectory != null)
        {
            // applicationBaseDirectory may be a URI not a local file path
            Uri applicationBaseDirectoryUri = new Uri(applicationBaseDirectory);
            if (applicationBaseDirectoryUri.IsFile)
            {
#修正前
                baseDirectory = applicationBaseDirectoryUri.LocalPath;
#修正後
                baseDirectory = Path.GetDirectoryName(applicationBaseDirectoryUri.LocalPath);
#修正終
            }
        }
    }
    catch
    {
        // ignore uri exceptions
    }
    if (baseDirectory != null && baseDirectory.Length > 0)
    {
        // Note that Path.Combine will return the second path if it is rooted
        return Path.GetFullPath(Path.Combine(baseDirectory, path));
    }
    return Path.GetFullPath(path);


他のケースでの問題が無いかは要検証ですな。