Pregunta

Estoy trabajando en un proyecto CodeDOM C #, que proporciona a los usuarios para compilar dinámicamente el código C #. Estoy consiguiendo error al agregar el montaje DLL de WPF (que está trabajando muy bien para WinForms). Se dice que "No encontraste #### en el montaje. ¿Le falta alguna referencia" cuando trato de agregar la referencia como "System.Windows.Media". Pero cuando estoy añadiendo la referencia por su ruta DLL como "C: \ Archivos de programa \ conjuntos de referencia \ Microsoft \ Framework \ v3.0 \ System.Printing.dll", entonces está diciendo que "Archivo C: \ Archivos de programa \ Referencia asambleas \ Microsoft \ Framework \ v3.0 \ System.Printing.dll que no se encuentra" bien, pero cuando pongo el System.Printing.dll a la carpeta ejecutable de la aplicación, que está trabajando.

A continuación se muestra el código que estoy utilizando para agregar la referencia a la opción del compilador:

CompilerParameters oParameters;
:
:
:
string lcAssemblyDll="C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\System.Printing.dll";
oParameters.ReferencedAssemblies.Add(lcAssemblyDll);

No soy capaz de entender el problema. También hay otro método para agregar los ensamblados de WPF?

Gracias

¿Fue útil?

Solución

Bueno, no puedo dar una respuesta exhaustiva de la parte superior de mi cabeza, pero en primer lugar tiene que darse cuenta de que una referencia de compilación no es lo mismo que ser capaz de resolver una asamblea durante la ejecución de la aplicación. Así que si se le dio ese error durante la ejecución de la aplicación me puedo imaginar que tirar typeloader excepciones.

En segundo lugar es probable que esté recibiendo "No encontraste #### en el montaje. ¿Le falta alguna referencia", porque los tipos de base de clases que dependen residen en asambleas a las que el System.Windows.Media está refiriendo.

Se podría tratar de resolver esta añadiendo referencias a los ensamblados que se cargan durante el Assembly.ReflectionOnlyLoad de los conjuntos que desee referido. Si se agrega un controlador de eventos para AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve, puede agregar código que hace referencias que esos conjuntos pueden ser cargados y luego simplemente se suman a la CodeCompileUnit.

Me he encontrado un problema con esto, sin embargo, y eso fue todo algunas referencias quedan optimizados distancia durante la compilación, por lo que he implementado un corte desagradable que simplemente añade una clase de contenedor a la CodeCompileUnit cuales initializies el primer tipo construible encuentra en cada uno de los asambleas.

Espero que ayude un poco.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top