странно ... я думаю, что код кажется в порядке :). Может быть, только одна небольшая вещь, и я не уверен, что это сработает, но я бы сначала инициировал некоторую переменную в file.Versions, а затем после выполнения работы с этой переменной. Что-то вроде:
var versions = file.Versions;
ctx.Load(file);
ctx.Load(versions);
ctx.ExecuteQuery();
foreach (FileVersion fileVersion in versions)
{
// check
}
Я знаю ... вероятно, не это .. но всегда стоит проверить :).
Также убедитесь, что у учетной записи, на которой запущен этот код, есть необходимые разрешения для получения версий. Вы всегда можете определить учетную запись с сетевыми учетными данными, такими как:
ctx.Credentials = new NetworkCredential(_username, _password, _domain);