如何将我的dll与一个配置文件连接起来?

9 浏览
0 Comments

如何将我的dll与一个配置文件连接起来?

有没有一种方法可以获得当前代码所在程序集的路径?我不想要调用程序集的路径,只想要包含代码的路径。基本上,我的单元测试需要读取一些 XML 测试文件,这些文件相对于 DLL 位于某个位置。我希望无论测试 DLL 是从 TestDriven.NET、MbUnit GUI 还是其他什么地方运行,路径都能正确解析。人们似乎误解了我的问题。我的测试库位于 say 中,并且我想要获得这个路径。迄今为止,三个建议在我从 MbUnit Gui 运行时都失败了:Environment.CurrentDirectory 给出了 C:\\Program Files\\MbUnit;System.Reflection.Assembly.GetAssembly(typeof(DaoTests)).Location 给出了 C:\\Documents and Settings\\george\\Local Settings\\Temp\\....\\DaoTests.dll;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

注意:在 .NET Core/.NET 5+ 中,Assembly.CodeBase 被弃用: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);
    }
}

当使用 NUnit(其中程序集从临时文件夹运行)时,Assembly.Location 属性有时会给您一些有趣的结果,因此我更喜欢使用 CodeBase 来以 URI 格式获取路径,然后 UriBuild.UnescapeDataString 删除开头的 File://,然后 GetDirectoryName 将其转换为正常的 Windows 格式。

0