代码之家  ›  专栏  ›  技术社区  ›  Glenn Slaven

如何将SiteCore的序列化树检查到TFS中

  •  0
  • Glenn Slaven  · 技术社区  · 16 年前

    我们使用Sitecore并在开发人员之间共享内容,我们将内容树序列化到文件系统,然后将其检查到源代码管理中。这在上一个使用SVN的项目中运行良好,但这个新项目正在使用TFS。

    遗憾的是,TFS不接受带有美元符号的路径,即

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

    这是Sitecore序列化结构的一个非常常见的文件名。有什么办法吗?Sitecore可以更改为不将$放在文件名前面吗?还是我们必须切换到SVN?

    3 回复  |  直到 16 年前
        1
  •  2
  •   Mark Cassidy    16 年前
        2
  •  0
  •   AakashM    16 年前

    序列化树时,Sitecore调用:Sitecore。壳牌。Framework.Commands。序列化。DumpTree命令。这在/App_Config/Commands.Config中定义。反序列化时,等效。LoadTreeCommand被调用。

    这些命令的作用只不过是调用:

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

    不幸的是,要获得需要覆盖的功能,您似乎必须1)覆盖commands.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();
        }
    }
    

    如您所见,文件名完全基于项目的路径。假设是,你可能会逃脱类似的惩罚。替换(“$”,“!dollartoken!”)并在解串器中实现相反的操作。