【问题标题】:C# generator needs to format file programmaticallyC#生成器需要以编程方式格式化文件
【发布时间】:2013-11-28 09:41:25
【问题描述】:

我有一个 C# Visual Studio 2010 控制台应用程序,它从 Excel 电子表格中读取行,然后使用 StreamWriter 相应地生成 C# 类。

类中生成的代码行未格式化 - 因为它们没有缩进。

我知道我可以手动打开这些文件并通过键入 ctrl E + D 对其进行格式化。

但我需要知道如何在生成器应用程序中以编程方式格式化它们。

我尝试了以下代码:

Type typeDTE = typeDTE = Type.GetTypeFromProgID("VisualStudio.DTE.10.0");
DTE dte = (DTE)Activator.CreateInstance(typeDTE, true);
dte.ExecuteCommand("Edit.FormatDocument", @"D:\Dev\ClinicalAuditGenerator\src\ClinicalAuditGenerator\Files\Entity\Patient.cs");

但是有两个问题

1) CreateInstance 需要将近 30 秒

2) ExecuteCommand 抛出以下异常:

Command Edit.FormatDocument is not available.

谢谢

【问题讨论】:

  • "类中生成的代码行未格式化。" - 在我看来这是你需要解决的问题......
  • 公平评论。但我不想在生成器中添加大量缩进,然后在进行更改时必须跟上哪些部分的缩进量等。
  • 只需将编写器包装在一个子类中,并在编写时为其提供缩进级别 - 编写器可以决定使用什么字符进行缩进。
  • 感谢 cmets,但我已经编写了大部分代码,并且不想通过提供缩进级别。这就是为什么我想让其他东西为我做这件事......

标签: c# visual-studio-2010 envdte


【解决方案1】:

这是因为在执行 Edit.FormatFile 时 Visual Studio 没有打开文件。我也在寻找一个干净的解决方案...... 临时的 Quick n' Dirty 仅适用于小文件(抱歉):

private void FormatFiles(Project project, List<ProjectItem> ProjectItems)
{
    for (int i = 0; i < ProjectItems.Count- 1; i++)
    {
        ProjectItems[i].Open();
        FromatFileIsOpened(ProjectItems[i]);
        ProjectItems[i].Document.Close();
    }
}


private void FromatFileIsOpened(ProjectItem formatFile)
{
    try
    {
        formatFile.Document.Activate();
        formatFile.DTE.ExecuteCommand("Edit.FormatDocument");
    }
    catch
    {
       FromatFileIsOpened(formatFile);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-23
    • 2018-01-29
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多