【问题标题】:Removing items in code generated from Codedom删除从 Codedom 生成的代码中的项目
【发布时间】:2011-03-29 05:42:10
【问题描述】:

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

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

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

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

【问题讨论】:

标签: vb.net codedom


【解决方案1】:

对于#2,你试过了吗?

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

(其中 CodeCompileUnit 是 CodeCompileUnit 类型的变量)

【讨论】:

  • 我有,不幸的是它没有删除它们,FalseTrue
【解决方案2】:

不,不能删除。它被硬编码到 VBCompiler 中。您可以在 Reflector 的 system.dll 中看到这一点。

【讨论】:

    【解决方案3】:

    您可以使用 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);
    }
    

    它很丑,但它有效 ™

    【讨论】:

    • 这是一个很好的方法。尤其是 C# 与 VB 的对比
    【解决方案4】:

    这是我的建议,灵感来自 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多