代码之家  ›  专栏  ›  技术社区  ›  Alan Deep

以编程方式编译/构建C#项目

  •  0
  • Alan Deep  · 技术社区  · 8 年前

    我有一个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);
                }
            }
    }
    

    我按以下方式调用生成方法:

     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目录中编译我的项目,我希望它以编程方式完成。

    1 回复  |  直到 8 年前
        1
  •  2
  •   UserName    8 年前

    它使用的决策之一 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%
    

    MSBuild Targets | Task Writing