我试着编译这段C#代码:
using System;
namespace test
{
internal static class Program
{
static void Main()
{
Console.WriteLine("Test");
Console.ReadKey(true);
}
}
}
字符串
转换成一个.exe文件,通过使用Roslyn:
var syntaxTree = CSharpSyntaxTree.ParseText(source);
var compilation = CSharpCompilation.Create("program.exe")
.WithOptions(new CSharpCompilationOptions(OutputKind.ConsoleApplication))
.AddReferences(Net60.References.All)
.AddSyntaxTrees(syntaxTree);
EmitResult emitResult = compilation.Emit(Path.Combine(path, "program.exe"));
if (emitResult.Success)
{
MessageBox.Show("Compiled.");
}
else
{
MessageBox.Show($"The compiler has encountered {emitResult.Diagnostics.Length} errors", "Errors while compiling");
foreach (var diagnostic in emitResult.Diagnostics)
{
MessageBox.Show($"{diagnostic.GetMessage()}\nLine: {diagnostic.Location.GetLineSpan().StartLinePosition.Line} - Column: {diagnostic.Location.GetLineSpan().StartLinePosition.Character}", "Error");
}
}
型
编译时没有一个错误。它编译“正确”,但当我启动它时,这个错误在控制台弹出:Unhandled exception: System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The specified file could not be found.
通过Visual Studio编译时(编译为.exe和.dll),它可以工作。
我怎么才能让它工作?我只需要它编译成一个,单一的.exe文件。这甚至可能吗?
1条答案
按热度按时间aiazj4mn1#
不是罗斯林;.NET SDK支持将事物组合成单个可执行文件,但这是作为发布的一部分完成的,而不是Roslyn直接做的事情。需要记住的一点是,Roslyn只是这里更大的工具链的一部分。