@AlexAns851017
Python dev

Как передать в текст кода переменную при динамической компиляции?

Доброго дня !

Я добавляю в проект динамическую компиляцию кода, который часто меняется. Могу ли я передать в строку-конструктор переменные типа array, byte и как это можно реализовать ?

using System;
using System.CodeDom.Compiler;
using System.IO;
using Microsoft.CodeAnalysis.CSharp.Scripting;
using Microsoft.CodeAnalysis.Scripting;
using Microsoft.CSharp;
using Westwind.Scripting;

namespace Simple
{
    class PreSimple
    {
        static void Main()
        {
            string code = File.ReadAllText(@"MyCompil.cs");
            //Console.Write(code);

            CSharpCodeProvider codeProvider = new CSharpCodeProvider();
            ICodeCompiler icc = codeProvider.CreateCompiler();
            string Output = "Out.exe";

            System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateExecutable = true;
            parameters.OutputAssembly = Output;

            CompilerResults results = icc.CompileAssemblyFromSource(parameters, code);

        }
    }
}


Файл для компиляции MyCompil.cs
using System;

namespace MyCompil
{
    class MyCompilClass
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hello");
            Console.ReadLine();
        }
    }
}


Это работает. Но что если вместо "hello" я хочу передать свое значение. Могу ли я это сделать для этого решения и если да, какие типы смогу передать ? если это по сути строка вида :
string code = @"using System;

namespace MyCompil
{
    class MyCompilClass
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hello");
            Console.ReadLine();
        }
    }
}"
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
twobomb
@twobomb
string code = File.ReadAllText(@"MyCompil.cs");
            code =code.Replace("hello", "Hi!");

Ну или в args передавать непосредственно при запуске приложения параметрами...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
yarosroman
@yarosroman Куратор тега C#
C# the best
Ну 2 варианта
1. Все равно запускается новый процесс, и при создании процесса передать параметры
https://stackoverflow.com/questions/5766574/start-...

2. Компилировать не в исполняемый файл, а в сборку, динамически загружать сборку и создавать экземпляр нужного класса и ему передавать параметры
https://learn.microsoft.com/en-us/dotnet/framework...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы