web-dev-qa-db-ja.com

フォーカスが失われたときにVisual Studio 2015ファイルを自動保存するにはどうすればよいですか?

私のクラスではCSS、HTML、JavaScriptを使用していますが、最近Visual Studio 2015を使用するようになりました。メモ帳++には、開いているすべてのドキュメントが失われるとすぐに自動的に保存できるアドオンがありますフォーカス。作業中のページとそのコーディングの間を頻繁に行き来するので、これにより多くの時間を節約できました。

Visual Studio 2015にも同様のアドオンがあることを望んでいるので、Webページで自分の作業を確認する前に、保存を忘れるのをやめることができます。誰か知ってる?

18
Alan Nelson

Visual Commander に次の拡張子を使用すると、Visual Studioから切り替えたときにファイルを自動保存できます。

public class E : VisualCommanderExt.IExtension
{
    public void SetSite(EnvDTE80.DTE2 DTE_, Microsoft.VisualStudio.Shell.Package package)
    {
        DTE = DTE_;
        System.Windows.Application.Current.Deactivated += OnDeactivated;
    }

    public void Close()
    {
        System.Windows.Application.Current.Deactivated -= OnDeactivated;
    }

    private void OnDeactivated(object sender, System.EventArgs e)
    {
        try
        {
            DTE.ExecuteCommand("File.SaveAll");
        }
        catch (System.Exception ex)
        {
        }
    }

    private EnvDTE80.DTE2 DTE;
}
38
Sergey Vlasov

上記の解決策

DTE.ExecuteCommand("File.SaveAll");

ソリューションに1000以上のプロジェクトがある場合、速度は遅すぎます。MSVSUIはフォーカスイベントを失うたびに数秒間ハングし、未保存の変更がない場合でもCPUを非常に消費します。

OnDeactivated()メソッドを編集しましたが、私の場合ははるかに速く機能します。

private void OnDeactivated(object sender, System.EventArgs e)
{
    try
    {
        EnvDTE.Documents docs = DTE.Documents;

        for (int i = 1; i <= docs.Count; i++) {
            EnvDTE.Document doc = docs.Item(i);
            if (!doc.Saved) {
                doc.Save();
            }
        }
    }
    catch (System.Exception ex)
    {
    }
}
2
DmitriyH