如何获取代码所在程序集的路径?

24 浏览
0 Comments

如何获取代码所在程序集的路径?

有没有一种方法可以获取当前代码所在程序集的路径?我不需要调用程序集的路径,只需要包含代码的那个程序集的路径。

基本上,我的单元测试需要读取一些相对于dll文件的xml测试文件。我希望路径始终能够正确解析,无论测试dll是从TestDriven.NET、MbUnit GUI还是其他东西运行的。

编辑:人们似乎误解了我所要求的内容。

我的测试库位于:

C:\\projects\\myapplication\\daotests\\bin\\Debug\\daotests.dll

我想要获得这个路径:

C:\\projects\\myapplication\\daotests\\bin\\Debug\\

到目前为止,三个建议都没有在我从MbUnit GUI运行时生效:

1. Environment.CurrentDirectory 给出 c:\\Program Files\\MbUnit。

2. System.Reflection.Assembly.GetAssembly(typeof(DaoTests)).Location 给出 C:\\Documents andSettings\\george\\Local Settings\\Temp\\ ....\\DaoTests.dll。

3. System.Reflection.Assembly.GetExecutingAssembly().Location 给出与前一个相同。

admin 更改状态以发布 2023年5月22日
0
0 Comments

这有帮助吗?

//get the full location of the assembly with DaoTests in it
string fullPath = System.Reflection.Assembly.GetAssembly(typeof(DaoTests)).Location;
//get the folder that's in
string theDirectory = Path.GetDirectoryName( fullPath );

0
0 Comments

注意: Assembly.CodeBase 在 .NET Core/.NET 5+ 中已被弃用: https://learn.microsoft.com/en-us/dotnet/api/system.reflection.assembly.codebase?view=net-5.0

原始答案:

我已定义以下属性,因为我们在单元测试中经常使用它。

public static string AssemblyDirectory
{
    get
    {
        string codeBase = Assembly.GetExecutingAssembly().CodeBase;
        UriBuilder uri = new UriBuilder(codeBase);
        string path = Uri.UnescapeDataString(uri.Path);
        return Path.GetDirectoryName(path);
    }
}

Assembly.Location 属性有时会在使用 NUnit 时给出一些有趣的结果(在此情况下,程序集从临时文件夹运行),因此我更喜欢使用 CodeBase,它以 URI 格式给出路径,然后 UriBuild.UnescapeDataString 删除开头的 File://GetDirectoryName 则将其更改为普通的 Windows 格式。

0