首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用CSharpCodeProvider传递变量?

如何用CSharpCodeProvider传递变量?
EN

Stack Overflow用户
提问于 2020-09-01 04:45:36
回答 1查看 124关注 0票数 1

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

代码语言:javascript
复制
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“移动到编译的应用程序中,我希望有人能给我指明正确的方向!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-01 05:14:35

诀窍是将数据“序列化”回编译器可以编译的代码。试试这个:

代码语言:javascript
复制
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,并让它将每个项都吐出来。您必须对这些项目进行迭代才能打印出来。我更新了你的代码以正确的方式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63681532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档