मैं रनटाइम पर कुछ कोड संकलित करता हूं और फिर असेंबली को वर्तमान एपडोमेन में लोड करता हूं, हालांकि जब मैं टाइप टाइप करता हूं तो टाइप टाइप करें। ..रनटाइम पर कोड संकलित करना, वर्तमान एपडोमेन में लोड करना, लेकिन Type.GetType इसे देख नहीं सकता
यहाँ है कैसे मैं कोड संकलन ...
public static Assembly CompileCode(string code)
{
Microsoft.CSharp.CSharpCodeProvider provider = new CSharpCodeProvider();
ICodeCompiler compiler = provider.CreateCompiler();
CompilerParameters compilerparams = new CompilerParameters();
compilerparams.GenerateExecutable = false;
compilerparams.GenerateInMemory = false;
foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
{
try
{
string location = assembly.Location;
if (!String.IsNullOrEmpty(location))
{
compilerparams.ReferencedAssemblies.Add(location);
}
}
catch (NotSupportedException)
{
// this happens for dynamic assemblies, so just ignore it.
}
}
CompilerResults results =
compiler.CompileAssemblyFromSource(compilerparams, code);
if (results.Errors.HasErrors)
{
StringBuilder errors = new StringBuilder("Compiler Errors :\r\n");
foreach (CompilerError error in results.Errors)
{
errors.AppendFormat("Line {0},{1}\t: {2}\n",
error.Line, error.Column, error.ErrorText);
}
throw new Exception(errors.ToString());
}
else
{
AppDomain.CurrentDomain.Load(results.CompiledAssembly.GetName());
return results.CompiledAssembly;
}
}
इस बिट संकलित विधानसभा से टाइप हो रही ठीक बाद विफल रहता है, यह प्रकार का उपयोग कर इसे खोजने के लिए सक्षम होने के लिए प्रतीत नहीं होता। GetType ....
Assembly assem = RuntimeCodeCompiler.CompileCode(code);
string typeName =
String.Format("Peverel.AppFramework.Web.GenCode.ObjectDataSourceProxy_{0}",
safeTypeName);
Type t = assem.GetType(typeName); //This works just fine..
Type doesntWork = Type.GetType(t.AssemblyQualifiedName);
Type doesntWork2 = Type.GetType(t.Name);
....
मैं सफलतापूर्वक विधानसभा करते हैं और ऐसा एप्लिकेशन डोमेन कि Type.GetType कि विधानसभा में प्रकार मिलेगा में लोड करने के बाद उम्मीद करेंगे। । –