从另一个项目编译整个项目

本文关键字:项目 编译 另一个 | 更新日期: 2023-09-27 17:57:02

我有一个Windows窗体应用程序,我用它来生成资源文件。我正在尝试向此应用程序添加此类功能,这将允许我将另一个 Windows 窗体应用程序编译为可执行文件,这将包含这些资源。但是,我坚持编译另一个Windows窗体项目部分。

我尝试遵循这篇文章,到目前为止我的代码如下所示:

CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = true;
parameters.IncludeDebugInformation = true;
parameters.GenerateInMemory = false;
//parameters.TreatWarningsAsErrors = true;
parameters.WarningLevel = 3;
parameters.CompilerOptions = "/optimize";
parameters.OutputAssembly = "Program.exe";
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
CompilerResults results = codeProvider.CompileAssemblyFromFile(parameters, new string[] { "Program.cs" });

我不完全确定,如果我这样做是否正确(如果我应该编译程序.cs文件)。程序.cs文件如下所示:

using System;
using System.Windows.Forms;
namespace example
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

当我尝试使用上面的代码编译它时,出现此错误:

Line number 16, Error Number: CS0246, 'The type or namespace name 'Form1' could not be found (are you missing a using directive or an assembly reference?)

如果你们能帮助我,我将不胜感激,我从来没有从另一个项目中编译过任何东西。

从另一个项目编译整个项目

假设您要编译的另一个项目是project.csproj,请参考Microsoft.Build.Framework并使用以下代码:

var globalProperty = new Dictionary<string, string> { { "Configuration", "Debug"}, { "Platform", "Any CPU" } };
var buildParameters = new BuildParameters(new ProjectCollection()) { Loggers = new List<ILogger> { new ConsoleLogger() } };
var buildRequest = new BuildRequestData(@"C:'example'project.csproj", globalProperty, "4.0", new[] {"Build" }, null);
BuildResult buildResult = BuildManager.DefaultBuildManager.Build(buildParameters, buildRequest);

或者你可以只包装 MsBuild.exe

var p = new Process(); 
p.StartInfo = new ProcessStartInfo(@"C:'Windows'Microsoft.NET'Framework'v4.0.30319'msbuild.exe");
p.StartInfo.Arguments = @"C:'example'project.csproj";
p.Start();