5

Codedomで生成されたコード内のアイテムをVBコードから削除する方法はありますか?

たとえば、私が生成するすべてのコードの上部には、次のものがあります。

'------------------------------------------------- -----------------------------
'
'このコードはツールによって生成されました。
'ランタイムバージョン:4.0.30319.1
'
'このファイルを変更すると、誤った動作が発生する可能性があり、次の場合は失われます。
'コードが再生成されます。
'
'------------------------------------------------- -----------------------------
オプション厳密オフ
オプション明示オン

コメント付きのテキストと両方の両方を削除してOption xxxください。をいじってみましCodeGeneratorOptionsたが、生成されたコードから上記を削除できませんでした。

4

4 に答える 4

2

#2については、これを試しましたか?

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

(CodeCompileUnitはCodeCompileUnit型の変数です)

于 2010-08-13T01:32:13.250 に答える
2

いいえ、削除できません。VBCompilerにハードコードされています。これは、Reflectorのsystem.dllで確認できます。

于 2010-08-26T19:33:09.467 に答える
2

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);
}

醜いですが、動作します™</ p>

于 2012-07-09T14:49:25.797 に答える
0

これは、Maxenceの提案から着想を得た私の提案ですが、時間の経過とともに変化する可能性のあるインデックスの代わりに正規表現を使用しているため、少し「クリーン」である可能性があります。これは、C#とVB.netの両方で機能するはずです。

using (var stringWriter = new StringWriter())
using (var sourceWriter = new StreamWriter(fileName, false, Encoding.UTF8))
{
   codeDomProvider.GenerateCodeFromCompileUnit(CodeUnit, stringWriter, generatorOptions);
   var newContent = Regex.Replace(stringWriter.ToString(), @"^//.*Runtime Version:.*$", "//\r", RegexOptions.Multiline);
   sourceWriter.Write(newContent);
}
于 2022-01-05T13:52:53.443 に答える