C# - 在运行时编译 C# 代码会导致"不存在"的错误



我正在尝试在运行时将多个C#文件编译为一个可执行文件,并且不断收到编译器错误,如果我从Visual Studio运行此代码,则不会出现这些错误。

我从运行时编译器得到的具体错误是";预期"和"方法必须具有返回类型"在"程序.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"中的代码,一切正常,因此实际代码中没有错误。

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

旧答案

好吧,我要再次宣布自己是白痴。最好在其他人之前自己做。

我通过更改程序.cs文件使其工作。

而不是

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

我做了

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

但我仍然不知道为什么它一开始就不起作用,因为它在Visual Studio中工作。

相关内容

  • 没有找到相关文章

最新更新