Как проверить дерево сериализации SiteCore в TFS - PullRequest
0 голосов
/ 23 июня 2009

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

К сожалению, TFS не будет принимать пути, в которых есть знак доллара, т.е.

\serialization\master\sitecore\templates\Branches\Calendar\Agenda View Settings\$name.item

и это очень распространенное имя файла для структуры сериализации Sitecore. Есть ли способ обойти это? Можно ли изменить Sitecore, чтобы не ставить $ перед именами файлов, или нам нужно переключиться на SVN?

Ответы [ 3 ]

2 голосов
/ 23 июня 2009

Да, и еще одна вещь.

http://www.hhogdev.com/products/team-development-for-sitecore.aspx

У меня еще не было возможности самостоятельно протестировать этот инструмент, но он выглядит интересным и потенциально может стать ответом на ваши проблемы с контролем версий.

0 голосов
/ 23 июня 2009

Я немного покопался. Это выполнимо, но не сразу.

При сериализации дерева Sitecore вызывает: Sitecore.Shell.Framework.Commands.Serialization.DumpTreeCommand. Это определено в /App_Config/Commands.config. При десериализации вызывается эквивалентный .LoadTreeCommand.

То, что делают эти команды, немного больше, чем вызов:

protected override void Dump(Item item)
{
    Sitecore.Data.Serialization.Manager.DumpTree(item);
}

И, к сожалению, чтобы получить доступ к функциональности, которую нужно переопределить, похоже, что вам необходимо: 1) переопределить команду в command.config, а затем создать свой собственный менеджер сериализации (наследующий от Sitecore). *

Я не совсем уверен, насколько это легко, поскольку большинство методов в этом классе являются статическими членами. Метод, который вам нужно переопределить / повторно реализовать, таков:

public static void DumpItem(string path, Item item)
{
    Assert.ArgumentNotNullOrEmpty(path, "path");
    Assert.ArgumentNotNull(item, "item");
    Directory.CreateDirectory(Path.GetDirectoryName(path));
    using (new SecurityDisabler())
    {
        TextWriter writer = new StreamWriter(File.Create(path));
        try
        {
            ItemSynchronization.WriteItem(item, writer);
        }
        catch
        {
        }
        writer.Close();
    }
}

Имя файла, как вы можете видеть, полностью основано на пути элемента. Предполагается, что вы, возможно, могли бы избежать использования чего-то вроде .Replace ("$", "! Dollartoken!") И реализовать обратное в своем десериализаторе.

Кажется, много работы, к сожалению.

0 голосов
/ 23 июня 2009

Предлагается ли обходной путь здесь (в разделе «Содержимое сообщества» внизу страницы) какая-либо польза для вас?

...