我的代码就像这样
public static object getClassInstance(string key, params object[] constructorArgs)
{
string assemblyPath = null;
string customClassName = null;
DataSet objDataset = getAssemblyInfo(key);
if (objDataset != null && objDataset.Tables.Count > 0 && objDataset.Tables[0].Rows.Count > 0)
{
assemblyPath = objDataset.Tables[0].Rows[0]["ACA_ASSEMBLY_PATH"].ToString();
customClassName = objDataset.Tables[0].Rows[0]["ACA_CLASS_NAME"].ToString();
}
Assembly assembly;
Type type;
if (assemblyPath != null && assemblyPath != string.Empty)
{
assembly = Assembly.LoadFile(assemblyPath);
type = assembly.GetType(customClassName);
}
else // if no customisation
{
type = Type.GetType(key);
}
object classInstance = constructorArgs == null ? Activator.CreateInstance(type) : Activator.CreateInstance(type, constructorArgs);
if (classInstance == null) throw new Exception("broke");
return classInstance;
}
在上面的代码中,我传递一个密钥作为名称空间限定。 //如果代码的自定义部分在某些日子里没有正常工作。然后它突然开始行动起来了。它在某些情况下从字符串返回类名,在某些情况下它不会返回(返回null)。从密钥生成的所有类名都可以从此方法访问。这样没有可访问性问题。
我看到了文档http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx。 在备注部分,它告诉
GetType仅适用于从磁盘加载的程序集。如果调用GetType来查找使用System.Reflection.Emit服务定义的动态程序集中定义的类型,则可能会出现不一致的行为。行为取决于动态程序集是否持久,即使用System.Reflection.Emit.AssemblyBuilderAccess枚举的RunAndSave或Save访问模式创建。如果动态程序集是持久的并且在调用GetType之前已写入磁盘,则加载程序会在磁盘上查找已保存的程序集,加载该程序集,并从该程序集中检索该类型。如果在调用GetType时尚未将程序集保存到磁盘,则该方法返回Nothing。 GetType不了解瞬态动态组件;因此,调用GetType以检索瞬态动态程序集中的类型将返回Nothing。
这有什么问题导致了我的问题吗? 。任何人都可以提供帮助。