我想创建一个在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
}
希望能帮助到你.