C# 获取我的测试类的命名空间
我有一个webdriver解决方案,其中包含10个左右的项目。1个包含所有常用方法的核心程序集/dll,以及9个在测试中使用这些方法的其他测试程序集 我需要访问这9个程序集之一的嵌入式资源,但我需要从核心dll内部进行访问。最好的方法是什么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
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());