Невозможно найти исполняемый файл компилятора csc.exe

Среда разработки Visual Studio 2019, язык С#, .NET Framework v4.7.2. Пытаюсь скомпилировать простой код, который должен скомпилировать новый файл в ходе работы программы. Код взят отсюда - https://habr.com/ru/post/67431/. При компиляции возникает исключение Невозможно найти исполняемый файл компилятора csc.exe в строке CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, source);. В сети есть решения этой проблемы, но для других ситуаций, а у меня ошибка возникает в простом примере кода.

Вот весь код:

using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Reflection;
using Microsoft.CSharp;

namespace ConsoleCompile
{
    class Program
    {
        static void Main(string[] args)
        {
            // Source code для компиляции
            string source =
            @"
using System.Collections.Generic;
using System.Linq;

namespace Foo
{
    public class Bar
    {
        public static void SayHello()
        {
            System.Console.WriteLine(""Hello World"");
            System.Console.WriteLine( string.Join("","", Enumerable.Range(0,10).Select(n=>n.ToString()).ToArray() ) );
        }
    }
}
            ";

            // Настройки компиляции 
            Dictionary<string, string> providerOptions = new Dictionary<string, string>
                {
                    {"CompilerVersion", "v4.7.2"}
                };
            CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions);

            CompilerParameters compilerParams = new CompilerParameters
            { OutputAssembly = "D:\\Foo.EXE", GenerateExecutable = true };

            // Компиляция 
            CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, source);

            // Выводим информацию об ошибках 
            Console.WriteLine("Number of Errors: {0}", results.Errors.Count);
            foreach (CompilerError err in results.Errors)
            {
                Console.WriteLine("ERROR {0}", err.ErrorText);
            }

            Console.ReadKey();
        }
    }
}

Ответы (1 шт):

Автор решения: Alexander Petrov

Вы используете .NET Framework 4.7.2, очевидно поэтому в коде задали значение "v4.7.2". Но это версия фреймворка. Вам нужно указать версию компилятора.

В словаре задайте "CompilerVersion", "v4.0".

→ Ссылка