Ошибки при создании билд файла

237
26 декабря 2017, 14:08

P.S: Windows 10 x64

Пытаюсь скомпилировать программу из билдера но получаю ошибку: Исходники: Stub + Builder

Вот код программы:

Stub:

using System;
using System.Reflection;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("[Title]")]
[assembly: AssemblyDescription("[Description]")]
[assembly: AssemblyCompany("[Company]")]
[assembly: AssemblyProduct("[Product]")]
[assembly: AssemblyCopyright("Copyright © [Copyright] 2017")]
[assembly: ComVisible(false)]
[assembly: Guid("cd6d1750-58e0-4c29-94d4-6928876fa334")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "[TITLE_CONSOLE]";
            Console.WriteLine("[TEXT]");
            Console.ReadKey();
        }
    }
}

Builder:

using Microsoft.CSharp;
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
namespace BuildConsole
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            CreateBuild(textBox1.Text, textBox2.Text);
        }
        private void CreateBuild(string ConsoleTitleView, string ConsoleText)
        {
            var Result = Properties.Resources.Stub;
            Result = Result.Replace("[Title]", "Test");
            Result = Result.Replace("[Description]", "Test");
            Result = Result.Replace("[Company]", "Test");
            Result = Result.Replace("[Product]", "Test");
            Result = Result.Replace("[Copyright]", "Test");
            Result = Result.Replace("[TITLE_CONSOLE]", ConsoleTitleView);
            Result = Result.Replace("[TEXT]", ConsoleText);
            var providerOptions = new Dictionary<string, string> { { "CompilerVersion", "v4.5" } };
            CompilerResults results;
            using (var provider = new CSharpCodeProvider(providerOptions))
            {
                var Params = new CompilerParameters { OutputAssembly = $"{Directory.GetCurrentDirectory()}/build.exe", GenerateExecutable = true, CompilerOptions = "/t:winexe" };
                Params.ReferencedAssemblies.Add("System.dll");
                results = provider.CompileAssemblyFromSource(Params, Result);
            }
            if (results.Errors.Count == 0)
            {
                MessageBox.Show("Good");
            }
            foreach (CompilerError compilerError in results.Errors)
            {
                MessageBox.Show(compilerError.ErrorText);
            }
        }
    }
}

А мне пишет что:

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

Как можно решить эту проблему? ( желательно с CodeDom компилятором )

Answer 1

Ваш пример у меня выдаёт такую же ошибку.

Ошибка пропадает, когда я ставлю "CompilerVersion", "v3.5" }.

Win10 + VS2015 + VS2017.

Проблема явно в путях: csc.exe от 4.5 не прописан в Path, подозреваю, что если добавить, то всё пройдёт на ура.

Ну или взять машину без студии, поставить на неё только .Net Framework 4.5 и прописать в Path -- то же будет работать.

Любопытно: посмотрел Path на своей машине -- не вижу ничего ведущего в c:\Windows\Microsoft.NET\Framework\vX.X.XXX или c:\Windows\Microsoft.NET\Framework64\vX.X.XXX (там лежит csc.exe)

Зато в Path есть C:\Program Files\dotnet\ и похоже я отстал от жизни, надо будет почитать про Roslyn

READ ALSO
Параметр vmpath в VMware

Параметр vmpath в VMware

Как узнать параметр vmpath в VMware для операции клонирования? https://codevmware

161
C# Xamarin Forms в Visual Studio, компиляция

C# Xamarin Forms в Visual Studio, компиляция

Недавно начал изучать это адский комбайн и уткнулся в то, что, при компиляции кода, если студии что-то не нравится, код просто не будет скомпилированВ...

220
Использование CEFSHARP для авторизации

Использование CEFSHARP для авторизации

Есть задача, сделать автоматическую авторизацию на сайтеИспользую CEFSHARP v

240