Вызов стандартного файла "Файл изменен вне 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;
}