如何给我的 roslyn 编译器输出一个图标?

在 codedom 中,我可以简单地使用 CompilerOptions 并将其添加为“/win32icon:”

但是在roslyn怎么办?

我已经有了这个。

   var syntaxTree = CSharpSyntaxTree.ParseText(File.ReadAllText("program.cs"));
         CSharpCommandLineArguments arguments = new CSharpCommandLineArguments();
        arguments.Win32Icon = @"ICON PATH";

        CSharpCompilation compilation = CSharpCompilation.Create(
            "program",
            new[] { syntaxTree },
            new[] { MetadataReference.CreateFromFile(typeof(object).Assembly.Location) },
            new CSharpCompilationOptions(OutputKind.ConsoleApplication));

        ResourceWriter rs = new ResourceWriter("res.resources");

        var resourceDescription = new ResourceDescription("program.Resources.resources", () => new MemoryStream(File.ReadAllBytes("res.resources")), true);

        using (var dllStream = new MemoryStream())
        using (var pdbStream = new MemoryStream())
        {
            var emitResult = compilation.Emit(dllStream, pdbStream, null,null, manifestResources: new [] {resourceDescription});
            if (emitResult.Success)
            {
                File.WriteAllBytes("test.exe",dllStream.GetBuffer());
                Console.WriteLine("compiled");
            }
            else
            {
                Console.WriteLine("foutje: {0}", emitResult.Diagnostics[0].ToString());
            }
        }

        Console.ReadLine();

感谢您的帮助!

最佳答案

您需要将 win32Resources 选项传递给通过 Compilation.CreateDefaultWin32Resources 创建的 Emit,该选项采用 Stream iconInIcoFormat 参数。

compilation.Emit(
    peStream: peStream,
    pdbStream: pdbStream,
    win32Resources: compilation.CreateDefaultWin32Resources(..., iconInIcoFormat: File.Open("<pathTo.ico>")))

更详细的例子是 here

关于c# - 使用 Roslyn 发出 Win32Icon,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41111826/

10-12 02:07