我们正在使用Sitecore并在开发人员之间共享内容,我们将内容树序列化到文件系统,然后将其检入源代码控制。这在上一个使用SVN的项目中运行良好,但是这个新项目正在使用TFS。
不幸的是,TFS不会接受带有美元符号的路径,即
\serialization\master\sitecore\templates\Branches\Calendar\Agenda View Settings\$name.item
这是Sitecore序列化结构的一个非常常见的文件名。有没有办法解决?是否可以将Sitecore更改为不将$放在文件名前面,还是我们必须切换到SVN?
答案 0 :(得分:2)
哦,还有一件事。
http://www.hhogdev.com/products/team-development-for-sitecore.aspx
我自己还没有机会测试这个工具,但它看起来很有趣,可能是你的源代码控制挑战的答案。
答案 1 :(得分:0)
答案 2 :(得分:0)
我做了一些挖掘。这是可行的,但不能立即直接前进。
在序列化树时,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)覆盖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();
}
}
如您所见,文件名完全基于Item的路径。假设是,您可能会使用.Replace(“$”,“!dollartoken!”)之类的东西,并在您的反序列化器中实现反向。
不幸的是,似乎有很多工作。