-1

我试图在运行时将多个 C# 文件编译成一个可执行文件,如果我从 Visual Studio 运行此代码,我会不断收到不存在的编译器错误。

我从运行时编译器得到的具体错误是“;预期”和“Program.cs”第 7 行的“方法必须具有返回类型”。显然,如果有什么要修复的,我会修复这些。

所以代码。这是实际的编译器代码:(删除了一些部分,例如实际的错误报告)

private CSharpCodeProvider provider = new CSharpCodeProvider();
private CompilerParameters parameters = new CompilerParameters();

private void RunOption_Click(object sender, RoutedEventArgs e)
{
    parameters.GenerateInMemory = false;
    parameters.GenerateExecutable = true;
    parameters.OutputAssembly = Path + "/builds/debug/bot.exe";
    parameters.ReferencedAssemblies.Add("System.dll");
    parameters.ReferencedAssemblies.Add("System.Threading.Tasks.dll");
    parameters.CompilerOptions = "/optimize";
    parameters.WarningLevel = 3;
    parameters.TreatWarningsAsErrors = false;

    string[] filesToCompile = Directory.GetFiles(Path + "\\src\\", "*.cs");

    CompilerResults results = provider.CompileAssemblyFromFile(parameters, filesToCompile);
}

这是它试图编译的两个文件。

程序.cs

using System.Threading.Tasks;

namespace MyBot
{
    class Program
    {
        static void Main(string[] args) => new MyBot().RunAsync().GetAwaiter().GetResult();
    }
}

我的机器人.cs

using System;
using System.Threading.Tasks;

namespace MyBot
{
    public class MyBot
    {       
        public async Task RunAsync()
        {
            Console.Title = "MyBot";
            Console.Read();
        }
    }
}

我在这里想念什么?如前所述,如果我在 Visual Studio 中运行“Program.cs”和“MyBot.cs”中的代码,一切正常,因此实际代码中没有错误。

4

1 回答 1

0

正如 Eric Lippert 所指出的,我使用的是比编译器更新的 .NET 版本。所以我只是将编译器更改为支持 C# 6 的新 Roslyn 编译器,这正是我所需要的。所以吸取的教训:始终确保您的目标是正确的框架版本。

旧答案

哎呀,我又要宣布自己是白痴了。最好在别人做之前自己做。

我通过更改 Program.cs 文件让它工作。

代替

static void Main(string[] args) => new MyBot().RunAsync().GetAwaiter().GetResult();

我做了

static void Main(string[] args)
{
    new MyBot().RunAsync().GetAwaiter().GetResult();
}

但是我仍然不知道为什么它在 Visual Studio 中工作后一开始就没有工作。

于 2017-05-12T16:03:45.413 回答