C# — компилировать код C# во время выполнения с настраиваемой конфигурацией

У меня есть вопрос, может ли компилятор CodeDom компилировать код С# с пользовательской конфигурацией, такой как бит x64 или бит x86. По умолчанию он компилирует код С# в .exe с конфигурацией «Любой процессор». Компиляция кода С#:

public static string BCS(string[] sources,string[] libs,string outPath,bool exef)
    {
        CSharpCodeProvider codeProvider = new CSharpCodeProvider();
        CompilerParameters parameters = new CompilerParameters(libs);
        parameters.GenerateExecutable = exef;
        parameters.OutputAssembly = outPath;
        CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, sources);

        if (results.Errors.Count > 0)
        {
            string errsText = "";
            foreach (CompilerError CompErr in results.Errors)
            {
                errsText = "("+CompErr.ErrorNumber +
                            ")Line " + CompErr.Line +
                            ",Column "+CompErr.Column +
                            ":"+CompErr.ErrorText + "" +
                            Environment.NewLine;
            }
            return errsText;
        }
        else
        {
            return "Success";
        }
    }

Я думаю, вы поняли мой вопрос, если нет, оставьте комментарий, я дам подробности.


person Byte    schedule 24.01.2019    source источник
comment
Плохо написано, не могли бы вы объяснить, что у вас за сообщение об ошибке? если вы хотите знать, может ли CodeDom компилировать C#, ответ «да», обратитесь к docs.microsoft.com/en-us/dotnet/framework/   -  person Waheed Rafiq    schedule 24.01.2019
comment
У меня нет ошибок. Мне просто нужен способ компилировать (в .exe) код С# для определенных платформ, таких как бит x86 и x64, с помощью CodeDom.   -  person Byte    schedule 24.01.2019


Ответы (1)


Попробуйте установить CompilerOptions таким образом

parameters.CompilerOptions = "-platform:anycpu32bitpreferred";

используя параметры из этой ссылки

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/platform-compiler-option

P.S. CSharpCodeProvider использует csc.exe

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/command-line-building-with-csc-exe

person Vladimir P.    schedule 24.01.2019
comment
Кроме того, знаете ли вы, как скомпилировать С# с пользовательской версией .NET Framework? Например, я хочу собрать С# с помощью .NET Framework 4.6.1. - person Byte; 24.01.2019
comment
stackoverflow.com/a/9591795/10496806 var options = new Dictionary<string, string> { { "CompilerVersion", "v4.0" } }; var compiler = new CSharpCodeProvider(options); но я не уверен, что можно указать 4.6.1, как вы хотите, вот версия компилятора, она отличается от версии .net stackoverflow.com/questions/13253967/ - person Vladimir P.; 24.01.2019
comment
о нет! У меня есть ошибка в строке CompilerResults: System.InvalidOperationException: не удается найти исполняемый файл компилятора csc.exe. - person Byte; 24.01.2019
comment
какую CompilerVersion вы указали? возможно, это неправильно или эта версия не установлена ​​на вашем ПК и.... да, CSharpCodeProvider использует csc.exe docs.microsoft.com/en-us/dotnet/csharp/language-reference/ - person Vladimir P.; 24.01.2019
comment
4.6.1, у меня есть компилятор для этой версии на пк - person Byte; 24.01.2019
comment
пожалуйста, прочитайте внимательнее мою вторую ссылку в моем втором комментарии stackoverflow.com/a/13255462/10496806 - person Vladimir P.; 24.01.2019
comment
так это невозможно? - person Byte; 24.01.2019
comment
Я думаю, что это возможно, но требует немного больше исследований и/или понимания того, как это работает. - person Vladimir P.; 24.01.2019
comment
я только что получил библиотеку С#, которая использует .net framework 4.6.1, и мне нужно использовать ее в моем скомпилированном приложении С#... так сложно... - person Byte; 24.01.2019
comment
я провел небольшое исследование и нашел, где находится версия 4.6.1, так что она находится в C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework - person Byte; 24.01.2019
comment
надеюсь, это даст вам направление, я не готов продолжать дискуссию, извините. Как видите, простой вызов csc.exe дает сумасшедший вывод обо всех версиях в целом imgur.com/a/nSqwQym< /а> - person Vladimir P.; 24.01.2019