首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式编译/构建C#项目

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

Stack Overflow用户
提问于 2018-04-17 06:56:58
回答 1查看 1.7K关注 0票数 0

我在c#中有一个项目,我想以编程的方式编译它,并把它放在Release文件夹中。

我正在使用CodeDomProvider,下面是我的代码:

代码语言:javascript
复制
 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方法:

代码语言:javascript
复制
 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();
        }
    }

我想要做的只是不单击“重新构建”并将我的项目编译在发布目录中,而是以编程的方式完成。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-18 13:16:15

其中一个决定是使用MSBuild SDK,它允许在C#上创建自定义任务。通过它,您可以控制建立过程,描述自己的逻辑。

代码语言:javascript
复制
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添加描述生成过程的属性。

创建任务的调用将来自自定义目标:

代码语言:javascript
复制
<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执行

代码语言:javascript
复制
msbuild.exe /t:Build.targets /p:Solutin=%pathToSolution%

MSBuild目标 x- 任务写作

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49871710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档