如何使用CSharpCodeProvider传递变量



我需要用我的应用程序创建一个EXE文件,我可以通过操纵字符串格式来传递字符串,但我不能传递我需要的其他变量,例如:字节数组,如果这有帮助的话,这是我的代码:

using Microsoft.CSharp;
using System;
using System.CodeDom.Compiler;
using System.Windows;
namespace ACompiler.CompWorker
{
class CompilerWorker
{
public static byte[] testarray = SomeClass.SomeArray;
public static string Key = "Testkey12";
public static void Compile()
{
CSharpCodeProvider CompileProvider = new CSharpCodeProvider();
CompilerParameters CompileProviderParameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll" }, AppDomain.CurrentDomain.BaseDirectory + "Compiled.exe", true);
CompileProviderParameters.GenerateExecutable = true;

string test= @"using System;
namespace Tests
{
class Program
{
static void Main(string[] args)
{
byte[] Content = " + testarray + @";
string Key = """ + Key + @""";
Console.WriteLine(""Key: "" + EKey);
Console.WriteLine(Content);
Console.ReadLine();
}
}
}
";
var Result = CompileProvider.CompileAssemblyFromSource(CompileProviderParameters, test);
}
}
}

基本上我想移动;testarray";进入编译好的应用程序,我希望有人能给我指明正确的方向!

诀窍是"串行化";数据返回到编译器可以编译的代码中。试试这个:

var arrayCode = "new byte[] { " + string.Join(", ", testarray) + " }";
string test = @"using System;
namespace Tests
{
class Program
{
static void Main(string[] args)
{
byte[] Content = " + arrayCode + @";
string Key = """ + Key + @""";
Console.WriteLine(""Key: "" + EKey);
foreach(byte b in Content)
{
Console.WriteLine(b.ToString());
}
Console.ReadLine();
}
}
}
";

请记住,不能对字节数组对象执行Console.WriteLine并让它吐出每个项。您必须对这些项目进行迭代才能将它们打印出来。我更新了你的代码以正确的方式执行。

相关内容

  • 没有找到相关文章

最新更新