Ho una soluzione con due assembly, uno di questi è denominato dominio e contiene una classe Book e una classe Author.Impossibile trovare il file dei metadati "Domain.dll" quando si utilizza il progetto di riferimento CSharpCodeProvider
Voglio creare dinamicamente una classe che eredita dalla classe Book. Qui è il mio codice:
public Book CreateBookProxy(Book book)
{
CSharpCodeProvider cscp = new CSharpCodeProvider(new Dictionary<String, String> { { "CompilerVersion", "v3.5" } });
var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll", "Domain.dll" }, "Proxies.dll", false);
parameters.GenerateExecutable = false;
var compileUnit = new CodeCompileUnit();
var ns = new CodeNamespace("Proxies");
compileUnit.Namespaces.Add(ns);
ns.Imports.Add(new CodeNamespaceImport("System"));
ns.Imports.Add(new CodeNamespaceImport("Domain"));
var classType = new CodeTypeDeclaration("BookProxy");
classType.Attributes = MemberAttributes.Public;
classType.BaseTypes.Add(new CodeTypeReference(typeof(Book)));
ns.Types.Add(classType);
var results = cscp.CompileAssemblyFromDom(parameters, compileUnit);
List<string> errors = new List<string>();
errors.AddRange(results.Errors.Cast<CompilerError>().Select(e => e.ErrorText));
return Activator.CreateInstance(Type.GetType("Proxies.BookProxy, Proxies")) as Book;
}
Comunque sto ottenendo il seguente errore:
Metadata file 'Domain.dll' could not be found
Domain.dll viene fatto riferimento nel mio start up del progetto in modo che esiste nella cartella bin in fase di esecuzione.
È interessante notare Assembly.Load ("Domain.dll"); genera un FileNotFoundException
Come posso risolvere questo problema?
Dove è la DLL? – SLaks
Fa parte della soluzione ed esiste nella cartella bin in fase di esecuzione – Liath