Я просто создал базовое консольное приложение, которое использует мою фреймворк для компиляции кода C# из текстового файла.Сохранение консольного приложения в C#
Способ, которым вы будете запускать это «SecureCodeBridge.exe File.txt», этот текстовый файл содержит код, который создает и показывает форму окна, которая отлично работает.
Проблема заключается в том, что, поскольку мое приложение является консольным приложением, она выйдет, как только метод из текстового файла вызывается (форма показывает для второго и исчезает, как выходы консоли приложения ...)
Это код моего консольного приложения:
static void Main(string[] args)
{
string entString = args[0];
if(System.IO.File.Exists(entString))
{
string entContents = System.IO.File.ReadAllText(entString);
SecureCode sC = new SecureCode(entContents);
CompilerResults cR = sC.Compile();
if(cR.Errors.Count > 0)
{
//Abort!
foreach(CompilerError cE in cR.Errors)
{
Console.WriteLine(cE.ErrorText);
}
}
else
{
sC.Run(cR);
}
}
}
и это код моя структура использует для компиляции и выполнения кода:
public class SecureCode
{
string code;
public SecureCode(string source)
{
code = source;
}
public CompilerResults Compile()
{
Dictionary<string, string> providerOptions = new Dictionary<string, string>
{
{"CompilerVersion", "v3.5"}
};
CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions);
CompilerParameters compilerParams = new CompilerParameters
{
GenerateInMemory = true,
GenerateExecutable = false
};
compilerParams.ReferencedAssemblies.Add("System.dll");
compilerParams.ReferencedAssemblies.Add("System.Windows.Forms.dll");
compilerParams.ReferencedAssemblies.Add("System.Drawing.dll");
CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, code);
return results;
}
public void Run(CompilerResults results)
{
object o = results.CompiledAssembly.CreateInstance("Code.Class");
MethodInfo mi = o.GetType().GetMethod("Main");
mi.Invoke(o, null);
}
}
ли существует ли способ сохранить консольное приложение в активном состоянии при вызове метода? (Например, форма показана)
Я попробовал второй метод, но пока он сохраняет приложение консоли (заморожено), он также заморозит форму, любые идеи? (попробовал запустить его в другом потоке, но затем мы вернемся к квадрату с формой, выходящей все время). – user265889
Запустите вызов в отдельный поток в цикле. Слабая рекомендация будет сохраняться до тех пор, пока форма не выйдет за рамки. –