2013-08-13 13 views
5

İki meclis ile bir çözüm buldum, bunlardan birine Domain denir ve bir Kitap sınıfı ve bir Yazar sınıfı içerir.Meta veri dosyası 'Domain.dll' CSharpCodeProvider referans projesini kullanırken bulunamadı

Kitap sınıfından miras alan bir sınıfı dinamik olarak oluşturmak istiyorum. İşte benim kod:

aşağıdaki hatayı alıyorum Ancak
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; 
    } 

: Çalışma zamanında bin klasöründe var bu yüzden

Metadata file 'Domain.dll' could not be found

Domain.dll benim başlangıç ​​yukarı projede başvurulmaktadır.

İlginçtir Assembly.Load ("Domain.dll"); FileNotFoundException

Bu sorunu nasıl çözebilirim?

+0

nerede DLL nedir? – SLaks

+0

Çözümün bir parçasıdır ve çalışma zamanında bin klasöründe bulunur. – Liath

cevap

10

açıkça göstermektedir şöyle Domain.dll konumunu belirtmek istiyoruz:

parameters.ReferencedAssemblies.Add(typeof(<TYPE FROM DOMAIN.DLL>).Assembly.Location); 
+0

Yüklemek istediğiniz türü henüz bilmiyorsanız ne olur? –

+0

@WilkovanderVeen O zaman montajda dizinin ya da dizinin tam yolunu bilmeniz gerekecek: konfigürasyonda [tarama] (https://msdn.microsoft.com/en-us/library/823z9h8w.aspx) öğesinde belirtilmelidir dosya. –

İlgili konular