簡體   English   中英

獲取在域中運行的單元測試中的物理文件路徑,而不是域的相對路徑

[英]Get physical file path in unit test running in a domain instead a relative path to the domain

如何在單元測試中獲取物理文件而不是域相關路徑?

我正在使用此代碼:

 var codebase = Assembly.GetExecutingAssembly().CodeBase;
 var pathUrlToDllDirectory = Path.GetDirectoryName(codebase);
 var pathToDllDirectory = new Uri(pathUrlToDllDirectory).LocalPath;

我得到的是這個

文件:\\ compdata \\ folders $ \\ userA \\ Documents \\ Projects \\ ProjectA \\ ProjectA.Test \\ bin \\ Debug

但是我所期望的是這樣的:

C:\windows\userA\Documents\Projects\ProjectA\ProjectA.Test\bin\Debug

我已經為Assembly創建了這些擴展名以獲取這些擴展名。 看看是否適合您:

using System.IO;
using System.Reflection;


public static class AssemblyExtensions
{
    /// <summary>
    /// Implemented - Returns the full path of the assembly file.
    /// </summary>
    public static string GetAssemblyPath(this Assembly Assemb)
    {
        string FileName = Assemb.CodeBase;

        if (FileName.Substring(0, 4).ToUpperInvariant() == "FILE")
            FileName = FileName.Remove(0, 8);

        return FileName;
    }


    /// <summary>
    /// Implemented - Returns the path to the folder where the assembly file is located
    /// </summary>
    public static string GetAssemblyFolder(this Assembly Assemb)
    {
        return Path.GetDirectoryName(GetAssemblyPath(Assemb));
    }


    /// <summary>
    /// Implemented - Combines the assembly folder with the passed filename, returning the full path of that file in the assmebly's folder.
    /// </summary>
    public static string GetFileInAssemblyFolder(this Assembly Assemb, string FileName)
    {
        return Path.Combine(GetAssemblyFolder(Assemb), FileName);
    }



    /// <summary>
    /// Implemented - Returns the full name of the embedded resources containing the passed string - Match case
    /// </summary>
    /// <param name="Assemb"></param>
    /// <param name="ResourceName"></param>
    /// <returns></returns>
    public static IEnumerable<string> GetResourcesContainingString(this Assembly Assemb, string ResourceName)
    {
        return Assemb.GetManifestResourceNames().Where(S => S.Contains(ResourceName));
    }



    /// <summary>
    /// Implemented - Returns the full name of the first embedded resource containing the passed string - Match case
    /// </summary>
    /// <param name="Assemb"></param>
    /// <param name="ResourceName"></param>
    /// <returns></returns>
    public static string GetFirstResourceContainingString(this Assembly Assemb, string ResourceName)
    {
        return Assemb.GetResourcesContainingString(ResourceName).First();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM