5

有没有办法从 VB 代码中删除 Codedom 中生成的代码中的项目?

例如,在我生成的所有代码的顶部,它有:

'---------------------------------------------------- -----------------------------------------
'
' 此代码是由工具生成的。
' 运行时版本:4.0.30319.1
'
' 对此文件的更改可能会导致不正确的行为,并且会在以下情况下丢失
' 代码被重新生成。
'
'---------------------------------------------------- -----------------------------------------
选项严格关闭
选项显式打开

我希望这两个都消失 - 评论文本和Option xxx. 我试过玩弄CodeGeneratorOptions,但无法从生成的代码中删除上述内容。

4

4 回答 4

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 回答
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 回答
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 回答