2009-09-22 17 views
10

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:

  1. 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?
  2. ¿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?
  3. 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.
  4. ¿Puedo usar CompilerParameters GenerateInMemory=true, o tengo que guardarlo en alguna parte?

Respuesta

2

Respuestas en orden:

  1. Sí, si desea descargar de forma independiente que necesitará dominios de aplicaciones independientes.
  2. Use lo que sea. Puede ayudarlo a depurar si puede volver a identificarlo en el script, pero eso sería más cierto para el Thread ejecutor.
  3. No siempre que establezca la ruta base de la configuración del dominio a la suya.

    AppDomainSetup.ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;

  4. No, no es necesario que lo guarde y no parece que lo beneficie.

+0

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? –

+0

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. :) –

+1

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. –

Cuestiones relacionadas