我在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();
}
}我想要做的只是不单击“重新构建”并将我的项目编译在发布目录中,而是以编程的方式完成。
发布于 2018-04-18 13:16:15
其中一个决定是使用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%https://stackoverflow.com/questions/49871710
复制相似问题