Удаление элементов в коде, сгенерированном из Codedom - PullRequest
5 голосов
/ 13 августа 2010

Есть ли способ удалить элементы кода, сгенерированного в Codedom, из кода VB?

Например, вверху всего кода, который я генерирую, он имеет:

'------------------------------------------------------------------------------
' 
'     This code was generated by a tool.
'     Runtime Version:4.0.30319.1
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' 
'------------------------------------------------------------------------------
Option Strict Off 
Option Explicit On 

Я бы хотел, чтобы оба из них удалились - закомментированный текст и оба Option xxx. Я пытался играть с CodeGeneratorOptions, но не смог удалить вышеперечисленное из сгенерированного кода.

Ответы [ 3 ]

2 голосов
/ 26 августа 2010

Нет, это не может быть удалено.Он жестко запрограммирован в VBCompiler.Вы можете увидеть это в system.dll в Reflector.

2 голосов
/ 09 июля 2012

Вы можете использовать StringWriter для вывода вашего кода, затем использовать StringBuilder.Remove, чтобы удалить первые строки:

using (var stringWriter = new StringWriter())
using (var streamWriter = new StreamWriter(path))
{
    codeDomProvider.GenerateCodeFromCompileUnit(unit, stringWriter, options);
    StringBuilder sb = stringWriter.GetStringBuilder();
    /* Remove the header comment (444 is for C#, use 435 for VB) */
    sb.Remove(0, 444);
    streamWriter.Write(sb);
}

Это ужасно, но работает ™

2 голосов
/ 13 августа 2010

Для # 2, вы пробовали это?

CodeCompileUnit.UserData.Add("AllowLateBound", False) ' strict on
CodeCompileUnit.UserData.Add("RequireVariableDeclaration", False) ' explicit off

(где CodeCompileUnit является переменной типа CodeCompileUnit)

...