运行编码UI时如何解决当前目录



我正在运行一个编码测试,该测试引用了dll,并且dll折射了一种" config"文件。在运行测试时,当前目录返回编码结果文件

的测试结果文件的目录
AppDomain.CurrentDomain.BaseDirectory

System.Reflection.Assembly.GetExecutingAssembly().CodeBase

System.Reflection.Assembly.GetExecutingAssembly().Location

这些都给了我相同的路径

我需要的是获取DLL所在的路径,因为那是构建配置文件的位置。

如果我要调试或刚刚运行测试(显然),这样我就不能使用它并向后导航或类似的东西。

还有其他方法可以获取您引用的DLL的位置??

编辑:

我是从我引用的DLL中引用此配置文件。

到目前为止,我唯一发现了测试dll的原始路径在测试上下文中。我最终使用反射以获取价值并使其可用。

    using System.Reflection;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    public static string CodeBase(
        TestContext testContext)
    {
        System.Type t = testContext.GetType();
        FieldInfo field = t.GetField("m_test", BindingFlags.NonPublic | BindingFlags.Instance);
        object fieldValue = field.GetValue(testContext);
        t = fieldValue.GetType();
        PropertyInfo property = fieldValue.GetType().GetProperty("CodeBase");
        return (string)property.GetValue(fieldValue, null);
    }

我用它来获取正在运行的DLL的路径,然后使用它来运行我知道的应用程序,该应用程序已编译到与测试相同的位置。

如果有人找到一种更好的方法,请告诉我。

获取从中加载给定dll位置的目录的最佳方法是将以下类型在该组件中定义的类型上使用。

var type = typeof(TypeInThatAssembly);
var path = Path.GetDirectory(type.Location);

CodeBaseLocation属性通常返回相同的信息,但非常不同

  • 代码库:这包含在加载期间引用的组件的位置
  • 位置:这是从磁盘上实际加载组件的地方

这些在应用程序上可能会有所不同,这些应用程序使用阴影复制的组件(asp.net,xunit等...)

最新更新