Компиляция кода во время выполнения, загрузка в текущий домен приложения, но Type.GetType не видит его.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Компиляция кода во время выполнения, загрузка в текущий домен приложения, но Type.GetType не видит его.

Сообщение Anonymous »

Я компилирую некоторый код во время выполнения, а затем загружаю сборку в текущий домен приложения, однако когда я затем пытаюсь выполнить 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;
}
}


Этот бит терпит неудачу после того, как тип из скомпилированной сборки был получен нормально, похоже, он не может найти его с помощью Type.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);

....


Подробнее здесь: https://stackoverflow.com/questions/302 ... ttype-cant
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Прочная функция, проблема GetType() и Type.GetType()
    Anonymous » » в форуме C#
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous
  • Избегайте указания имени пространства имен в Type.GetType().
    Anonymous » » в форуме C#
    0 Ответы
    45 Просмотры
    Последнее сообщение Anonymous
  • Type.gettype ("namespace.a.b.classname") возвращает NULL
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Как отправить сигнал "ctrl+c" / sigint, чтобы Gradle javaexec type type type jvm?
    Anonymous » » в форуме JAVA
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Как добавить домен в WebServer, в котором уже есть домен?
    Anonymous » » в форуме Apache
    0 Ответы
    671 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»