元数据文件';Domain.dll';使用CSharpCodeProvider引用项目时找不到

本文关键字:引用 项目 找不到 CSharpCodeProvider dll 文件 Domain 元数据 使用 | 更新日期: 2023-09-27 18:27:35

我有一个包含两个程序集的解决方案,其中一个程序集名为Domain,包含Book类和Author类。

我想动态地创建一个从Book类继承的类。这是我的代码:

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

然而,我得到了以下错误:

找不到元数据文件"Domain.dll"

Domain.dll在我的启动项目中被引用,因此它在运行时存在于bin文件夹中。

有趣的是Assembly.Load("Domain.dll");引发FileNotFoundException

如何解决此问题?

元数据文件';Domain.dll';使用CSharpCodeProvider引用项目时找不到

我建议明确指定Domain.dll的位置如下:

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