你能把变量传递给C#编译器代码吗?

Jak*_*ake 14 c# compiler-construction codedom

这是我目前的情况 - 我有一个应用程序使用CodeDom编译作为字符串的C#代码.我有一个存储密码的SecureString,我想知道是否有任何方法可以将SecureString变量作为SecureString传递给已编译的代码?

这是一些示例代码:

SecureString securePassword = getSecurePass();

string codeString =
        @"using System;
        using System.Security;

        namespace SomeProgram
        {
            class MyClass
            {
                static void Main(string[] args)
                {
                    SecureString securePass = new SecureString();
                    // somehow set this equal to the securePassword variable
                }
            }
        }";


// Compiler Code
CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp");
string outFile = "output.exe"; 

System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = true;
parameters.OutputAssembly = outFile;
CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, codeString);
Run Code Online (Sandbox Code Playgroud)

我找不到办法做到这一点,我想这实际上是不可能的,而我可能只是将密码存储在加密文件中并从中读取?

PaR*_*RaJ 1

那么您所需要的只是找到一种方法来更改SecureStringSystem.String.

已经在这里回答:How to conversion SecureString to System.String?

string codeString =
    String.Format(@"using System;
    using System.Security;

    namespace SomeProgram
    {
        class MyClass
        {
            static void Main(string[] args)
            {
                SecureString securePass = new SecureString();
                {0} // use it the way u like
            }
        }
    }", SecureStringToString(securePassword));
Run Code Online (Sandbox Code Playgroud)

  • 我相信OP希望在此过程中保持字符串的安全。 (3认同)