Tengo un código C# (llamémoslo "script") Estoy compilando en tiempo de ejecución. Utiliza una interfaz en mi programa principal que utilizo para acceder a sus funciones. Una vez que se realiza la compilación tengo CompilerResults.CompiledAssembly
en cuyo caso puedo CreateInstance(Type)
.Descargar el ensamblado compilado por CodeDom
Una vez que haya terminado de usar la secuencia de comandos me gustaría descargar por completo. Por lo que sé, sólo puedo hacerlo si puedo crear un dominio de aplicación por separado: Loading DLLs into a separate AppDomain
tenía algunas preguntas específicas a mi aplicación:
- Si tengo varias secuencias de comandos para compilar y desea descargar de forma independiente, ¿tengo que crear dominios de aplicación separados para cada uno?
- ¿Qué nombres de dominio de aplicaciones debo usar? ¿Los GUID serían una buena idea? ¿Hay algún nombre que deba evitar que pueda entrar en conflicto?
- Si el conjunto está en un dominio de aplicación separado, ¿tendrá algún problema para acceder a la interfaz en el programa principal? Actualmente estoy haciendo
ReferencedAssemblies.Add(typeof(Interface).Assembly.Location)
antes de compilar. - ¿Puedo usar
CompilerParameters GenerateInMemory=true
, o tengo que guardarlo en alguna parte?
Tuve problemas para hacer que esto funcione, así que investigué un poco más. Parece que tendré que trabajar un poco más para que funcione: http://www.devsource.com/c/a/Using-VS/Dynamic-Plugins-Using-the-codeAppDomaincode-Class-to-Load -y-Descargar-Código /. A menos que haya algo nuevo en versiones posteriores? –
Parece que estoy de suerte. Como uso .NET 3.5, puedo usar el Framework de Extensibilidad Administrada. Por supuesto, tengo que ir a aprenderlo ahora. :) –
Parece que estoy entrando más profundo de lo que quería/esperaba. MEF en realidad no puede descargar ensamblajes ya que no usa un Dominio de aplicación separado. MAF (System.AddIn) puede, pero es mucho más complejo de usar. MAF y MEF se pueden usar juntos. Aunque realmente quiero poder descargar un ensamblaje, creo que tendrá que esperar al menos para la versión 2. –