我有一个定义类的命名空间(我将省略代码):
namespace My.Business.Services
{
public class ProgressSender
{
}
}
此项目保存为DLL。
在我的解决方案的另一个项目中,我尝试以各种方式实现它(实际上这是我的app.config中的一个字符串)但它们都失败了(它确实可以在代码中显式创建类的早期绑定)。我也把My.Business.Services作为程序的参考包括在内:
namespace My.Progress.Imaging
{
static class Program
{
static void Main(string[] args)
{
string exportItemNS = "My.Business.Services";
string exportItemC = "ProgressSender";
string exportItemFull = "My.Business.Services.ProgressSender";
//value cannot be null
ProgressSender obj =
(ProgressSender)Activator.CreateInstance(Type.GetType(exportItemFull));
//could not load type 'ProgressSender' from assembly 'My.Business.Services'
var obj=Activator.CreateInstance(exportItemNS, exportItemC);
//could not load type 'ProgressSender' from assembly 'My.Business.Services'
ProgressSender s=(ProgressSender)Activator.CreateInstance(null, exportItemFull);
//Loads ok but then classType is null
Assembly assembly;
assembly = Assembly.Load(exportItemNS);
Type classType = assembly.GetType(exportItemC);
}
}
}
如果我从相同的命名空间或甚至系统中获取类型,那就没关系:
Type t = Type.GetType("My.Progress.Imaging.Program");
t = Type.GetType("System.String");
答案 0 :(得分:2)
您需要指定完整的程序集限定名称。只有mscorlib和系统类型才能提供没有程序集名称的类型名称。
所以在你的情况下:
“My.Business.Services.ProgressSender,My.Business.Services”
如果您的类型位于My.Business.Services.dll程序集中。
请参阅https://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname(v=vs.110).aspx