2013-08-13 5 views
5

का उपयोग करते समय मेटाडाटा फ़ाइल 'Domain.dll' नहीं मिला, मेरे पास दो असेंबली के साथ समाधान है, इनमें से एक को डोमेन कहा जाता है और इसमें एक पुस्तक वर्ग और लेखक वर्ग होता है।CSharpCodeProvider संदर्भ प्रोजेक्ट

मैं गतिशील रूप से कक्षा वर्ग से विरासत में एक वर्ग बनाना चाहता हूं। यहाँ मेरी कोड है:

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; 
    } 

हालांकि मैं निम्न त्रुटि हो रही है:

Metadata file 'Domain.dll' could not be found

Domain.dll मेरा प्रारंभ अप परियोजना में संदर्भित है तो यह रन टाइम पर बिन फ़ोल्डर में मौजूद है।

दिलचस्प विधानसभा। लोड ("Domain.dll"); एक फ़ाइल नॉटफाउंड अपवाद

मैं इस समस्या को कैसे हल कर सकता हूं?

+0

DLL कहां है? – SLaks

+0

यह समाधान का हिस्सा है, और यह रनटाइम – Liath

उत्तर

10

मैं स्पष्ट रूप से सुझाव है कि निम्नलिखित के रूप में Domain.dll का स्थान निर्दिष्ट होगा:

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

पर बिन फ़ोल्डर में मौजूद है क्या होगा यदि आप अभी तक उस प्रकार को नहीं जानते हैं जिसे आप लोड करना चाहते हैं? –

+0

@WilkovanderVeen तो आपको असेंबली के साथ असेंबली या निर्देशिका के पूर्ण पथ को जानना होगा [probing] (https://msdn.microsoft.com/en-us/library/823z9h8w.aspx) तत्व में कॉन्फ़िगरेशन में निर्दिष्ट किया जाना चाहिए फ़ाइल। –

संबंधित मुद्दे