C # CodeDom Добавить встроенный ресурс без предварительной записи файла на диск - PullRequest
1 голос
/ 13 августа 2011

В CodeDom можно добавить встроенный ресурс в динамически создаваемый файл, используя свойство CompilerParameters.EmbeddedResources .В моем проекте я добавляю несколько байтов данных в качестве встроенного ресурса в мой динамически создаваемый файл (как показано ниже).

Byte[] bytes = new byte[] {1,2,3,4,5};

// Write the data to disk (I would like to avoid this step!).
File.WriteAllBytes(@"C:\EmbeddedResource.exe", bytes); 

CompilerParameters cp;
cp.EmbeddedResources.Add(@"C:\EmbeddedResource.exe");

Есть ли какой-нибудь способ, которым я могу хранить данные байтов в памятии добавьте его как встроенный ресурс прямо из памяти.

Спасибо за любой совет,

Эван

1 Ответ

0 голосов
/ 13 августа 2011

Боюсь, ты не сможешь.Заглядывая в CSharpCodeGenerator (с помощью TeleDric JustDecompile или Redgate .NET Reflector), я обнаружил использование класса CompilerParameters:

private string CmdArgsFromParameters(CompilerParameters options)
{
    StringBuilder stringBuilder = new StringBuilder(128);
    // ...
    StringEnumerator stringEnumerator = options.EmbeddedResources.GetEnumerator();
    try
    {
        while (stringEnumerator.MoveNext())
        {
            string str = stringEnumerator.Current;
            stringBuilder.Append("/res:\"");
            stringBuilder.Append(str);
            stringBuilder.Append("\" ");
        }
    }
    finally
    {
        IDisposable disposable2 = stringEnumerator as IDisposable;
        if (disposable2 != null)
        {
            disposable2.Dispose();
        }
    }
    // ...
    return stringBuilder.ToString();
}

Они используют его для создания строки со всеми параметрами командной строки, которые передаются вexe компилятора C # (http://msdn.microsoft.com/en-us/library/6ds95cz0%28v=VS.100%29.aspx). Итак, в конце, я думаю, ваш код просто скомпилирован с помощью csc.exe.

[] s

...