C# 获取我的测试类的命名空间

C# 获取我的测试类的命名空间,c#,dll,webdriver,.net-assembly,system.reflection,C#,Dll,Webdriver,.net Assembly,System.reflection,我有一个webdriver解决方案,其中包含10个左右的项目。1个包含所有常用方法的核心程序集/dll,以及9个在测试中使用这些方法的其他测试程序集 我需要访问这9个程序集之一的嵌入式资源,但我需要从核心dll内部进行访问。最好的方法是什么 namespace = webdriver.core json.cs - reads a json file and returns it as a string namespace = webdriver.marketplacestest marke

我有一个webdriver解决方案,其中包含10个左右的项目。1个包含所有常用方法的核心程序集/dll,以及9个在测试中使用这些方法的其他测试程序集

我需要访问这9个程序集之一的嵌入式资源,但我需要从核心dll内部进行访问。最好的方法是什么

namespace = webdriver.core 
json.cs - reads a json file and returns it as a string

namespace = webdriver.marketplacestest 
marketplace1Test.cs - calls one of the methods in json.cs such as getName();
profile.json - holds {"marketplace1" : "Amazon"}
从已知名称空间调用嵌入式资源很容易。我是这样做的:

private static string fromEmbeddedResource(string myNamespace, string myFolder, string fileName)
{
    string result;
    using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(myNamespace + "." + myFolder + "." + fileName))
    using (StreamReader reader = new StreamReader(stream))
    {
        result = reader.ReadToEnd();
    }

    return result;

}
正如您所看到的,我只调用下面的代码,将文件作为字符串

string json = fromEmbeddedResource("WebDriver.Core", "CFG", "pid.json");
但是,当文件嵌入到我的一个测试DLL中时,就更难了。有人知道我如何访问或获取程序集的命名空间吗?我试过

Assembly.GetCallingAssembly().GetTypes();

但是它看起来像是从WebDriver.Core.dll程序集中提取类型,而不是从WebDriver.Marketplace1.dll程序集中提取类型。

。我遇到的问题是,调用的程序集不是正确的程序集,因为我正在调用我的核心dll中的一个方法,该方法调用了我的核心dll中的另一个方法。我是通过让装配人员通过来完成的,但那很昂贵。为了提高效率,我修改了静态设置Repository类,该类在字典中保存两个程序集。这样,我就可以传入一个“core”或“test”字符串并拉取程序集,而不必确定每次使用的是执行程序集还是调用程序集

private static Dictionary<string, object> _assembly = new Dictionary<string,object>();
public static Assembly getAssembly (string type)
{
    return _assembly[type] as Assembly;
}
public static void addAssembly(string myType, Assembly assembly)
{
    bool containsKey = _assembly.ContainsKey(myType);
    if (!containsKey)
    {
        _assembly.Add(myType, assembly);
    }
}

现在,我可以随时调用所需的任意一个程序集,并知道得到的是哪一个。

string testNamespace=assembly.GetCallingAssembly().GetName().Name;这给了我正确的名称,但我仍然在使用(StreamReader。。。
Settings.addAssembly("core", Assembly.GetExecutingAssembly());
Settings.addAssembly("test", Assembly.GetCallingAssembly());