gcc-E произведет предварительно обработанный источник к stdout.
item.Versions [index] возвращает экземпляр SPListItemVersion, а SPListItemVersion.ListItem возвращает родительский SPListItem. Таким образом, ваш versionedItem в конечном итоге будет ссылаться на тот же объект, что и item, и вы проверяете одну и ту же версию снова и снова.
Я считаю, что вы действительно хотите проверить
if (item.Versions[index].Level == SPFileLevel.Published) {
// check item.Versions[index].VersionLabel
}
В итоге мой код выглядел так:
if (doclist.EnableVersioning)
{
SPListItemVersionCollection allVersions = item.Versions;
// Iterate through all versions
foreach (SPListItemVersion version in allVersions)
{
if (version.Level == SPFileLevel.Published)
{
itemFound = version.ListItem;
}
}
}
Довольно аккуратно, и я действительно надеюсь, что он работает при развертывании у клиента!
Способ, который рекомендует Маттиас и который вы реализовали, - лучший способ сделать это. Это немного неудобно, но все же эффективно, поскольку элементы отсортированы от самых новых до самых старых. Это означает, что вы, скорее всего, быстро найдете соответствие опубликованной версии.
Расширение статьи MSDN SPListItemVersionCollection (в частности, добавление Себастьяна Войцеховского):
// Current version of the item (note: this may be a draft)
SPListItem.Versions[0]
// Previous version of the item
SPListItem.Versions[1]
// First version of the item
SPListItem.Versions[SPListItem.Versions.Count - 1]