Вызов стандартного файла "Файл изменен вне Visual Studio"

Я успешно создал собственный редактор одного представления в моем VSPackage. Одной из многих вещей, с которыми мне пришлось столкнуться, была реакция на ситуацию, когда отредактированный файл был изменен вне Visual Studio - "стандартные" редакторы в диалоговом окне отображения Visual Studio с такими параметрами, как "да", "да для всех" (перезагрузить содержимое) и т. Д., так что если изменилось больше файлов, отображается только один диалог.

Тем не менее, единственное, что я могу сделать в своем VSPackage, это отображать пользовательское диалоговое окно после изменения файла. Это не красиво - когда файл, отредактированный в моем редакторе, изменился вместе с некоторыми другими, пользователю будут показаны два совершенно разных диалога.

Таким образом, вопрос - есть ли способ вызвать диалог "стандартный файл" Visual Studio ", измененный вне VS" для моего файла?

1 ответ

Похоже, вы используете интерфейс IVSFileChangeEx.

Этот блог может быть почти то, что вы ищете. Обычно это используется для проверки, можно ли редактировать файл или перезагружать его, и предоставляет диалоговое окно для файла (извлечение или перезагрузка).

При этом используется интерфейс IVsQueryEditQuerySave2. Вы, вероятно, хотите позвонить DeclareReloadableFile, в котором будет "указано, что файл будет перезагружен, если он изменится на диске".

private bool CanEditFile()
{
  // --- Check the status of the recursion guard
  if (_GettingCheckoutStatus) return false;

  try
  {
    _GettingCheckoutStatus = true;

    IVsQueryEditQuerySave2 queryEditQuerySave =
      (IVsQueryEditQuerySave2)GetService(typeof(SVsQueryEditQuerySave));

    // ---Now call the QueryEdit method to find the edit status of this file
    string[] documents = { _FileName };
    uint result;
    uint outFlags;

    int hr = queryEditQuerySave.QueryEditFiles(
      0, // Flags
      1, // Number of elements in the array
      documents, // Files to edit
      null, // Input flags
      null, // Input array of VSQEQS_FILE_ATTRIBUTE_DATA
      out result, // result of the checkout
      out outFlags // Additional flags
      );
    if (ErrorHandler.Succeeded(hr) && (result ==
      (uint)tagVSQueryEditResult.QER_EditOK))
    {
      return true;
    }
  }
  finally
  {
    _GettingCheckoutStatus = false;
  }
  return false;
}
Другие вопросы по тегам