我在c#中有一个项目,我想以编程方式编译并将其放在Release文件夹中。
我正在使用CodeDomProvider,下面是我的代码:
class Compiler
{
public static void Build(string filename,string outputAssemblyPath)
{
CodeDomProvider cdp = CodeDomProvider.CreateProvider("CSharp");
CompilerParameters cp = new CompilerParameters()
{
GenerateExecutable = true,
GenerateInMemory = true,
IncludeDebugInformation = true,
OutputAssembly = outputAssemblyPath
};
CompilerResults result = cdp.CompileAssemblyFromFile(cp, filename);
foreach (string s in result.Output)
{
Console.WriteLine(s);
}
}
}
我按以下方式调用Build方法:
class Program
{
static void Main(string[] args)
{
Compiler.Build("C:/Projects/Project1/alan.project/Project1.csproj", "C:/Projects/Project1/alan.project/bin/Release/");
Console.ReadLine();
}
}
我想做的只是点击" Rebuild"并将我的项目编译在Release目录中,我希望它以编程方式完成。
答案 0 :(得分:2)
使用MSBuild SDK
的决定之一,允许在C#
上创建自定义任务。通过它,您可以控制构建过程,描述自己的逻辑。
using Microsoft.Build.Construction;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
using System.Linq;
namespace MSBuild.Common
{
class Build : Task
{
[Required]
public string Solution
{
get;
set;
}
public override bool Execute()
{
return BuildEngine2.BuildProjectFilesInParallel(SolutionFile.Parse(Solution).ProjectsByGuid.Select(p => p.Value.AbsolutePath).ToArray(), null, null, null, null, true, false);
}
}
}
这是任务示例。它接受解决方案的路径并执行并行编译其项目。您可以向BuildProjectFilesInParallel添加将描述构建过程的属性。
创建任务的调用将来自自定义目标:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" InitialTargets="EntryBuild">
<UsingTask AssemblyFile="Build.dll" TaskName="Build" />
<Target Name="EntryBuild">
<Build Solution="$(Solution)" />
</Target>
</Project>
通过MSBuild CLI
:
msbuild.exe /t:Build.targets /p:Solutin=%pathToSolution%