【问题标题】:Compile at run time exclude class that is generated by CodeDom在运行时编译排除由 CodeDom 生成的类
【发布时间】:2015-05-09 21:33:54
【问题描述】:

我已使用 CodeDom 生成所谓的“Product.cs”类,我的类已在正确的路径中生成,但我的代码无法完美和完整,因为此“Product.cs”已从我的解决方案中排除,我必须在运行时包含它 我搜索并找到了创建 csc.exe 并加载程序集的方法,以便在运行时编译我的类并将其包含在我的解决方案中,然后我可以处理“ Product.cs”。

我正在使用 Visual Studio 2013 在 Web 应用程序(例如 MVC)上编写代码。 提前感谢您的任何帮助。

【问题讨论】:

标签: compiler-construction code-generation .net-assembly codedom


【解决方案1】:

它会为你工作。我刚试过,见cmets

  • 如果要包含类文件,请编辑项目文件。该文件是一个 xml 文件。您可以轻松地对其进行编辑。要知道标签,我建议请在任何文本编辑器(如记事本)中打开项目文件,使用 MSBuild 或任何您想用来构建项目的工具。
  • 如果要生成和创建项目,请参阅反射。另外,请检查:http://www.codeproject.com/Articles/10324/Compiling-code-during-runtime

【讨论】:

    【解决方案2】:

    要包含一个排除文件,特别是当它是由CodeDom或EnvDTE等代码生成方法生成时,应遵循:

    1. 右键单击解决方案上的引用
    2. 选择程序集 -> Microsoft.Build
    3. 编写这样的代码:

      var p = new Microsoft.Build.Evaluation.Project(@"D:\MVCNHibernate\MVCNHibernate\MVCNHibernate.csproj");
       p.AddItem("编译", @"D:\MVCNHibernate\MVCNHibernate\Entities\Product.cs");
       p.保存();
       p.Build();

    然后“Product.cs”将成为您在项目或解决方案中包含的文件,并且可以使用它。

    【讨论】:

    • 正如您所说,上述是您问题的正确解决方案。那么,我相信您应该将以上标记为已接受的答案。
    • 非常感谢 Gaurav 的回答,它给了我正确的线索来实现我的方式。
    • 做这项研究的经验很好,我从你的问题中学到了很多东西。不用说谢谢,随时欢迎您!随时在这里问任何问题。祝你好运。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多