c# – Visual Studio AfterBuild生成代码的任务

我想创建一个在Visual Studio项目中生成代码的AfterBuild任务.问题是因为它是AfterBuild任务,所以生成的代码不会被编译.

我需要它作为AfterBuild任务,因为我加载构建的输出程序集并使用反射检查它以生成代码.

有没有办法可以在AfterBuild任务之后编译生成的代码?

谢谢.

最佳答案 可以在运行时使用
CSharpCodeProvider类编译C#代码,请看这个
article,这是很好的解释.虽然看起来你想通过注入你在AfterBuild任务事件中编译的代码来改变(例如编织)你的库.

如果是这种情况,实现您想要做的唯一方法是使用像PostSharp或Mono.Cecil这样的AOP(面向方面​​编程)框架.他们所做的是生成IL(中间语言)并在运行时或编译时注入到您的程序中.

在这篇answer中讨论了一些针对.NET的AOP解决方案.

编辑:

要以编程方式编译c#project(* .csproj),.NET框架中有特定的类.查看Microsoft.Build.Evaluation命名空间.

但是这段代码应该对你有用.在你的任务中尝试它,你应该能够从你的代码中启动另一个编译过程.

      const string projectPath = @"your csproj path";
      var collection = new Microsoft.Build.Evaluation.ProjectCollection {DefaultToolsVersion = "4.0"};


      collection.RegisterLogger(new ConsoleLogger());
      collection.LoadProject(projectPath);

      var project = new Microsoft.Build.Evaluation.Project(collection);

      if (!project.Build())
      {
         //Error
      }

希望能帮助到你.

点赞