我正在尝试使用Visual Studio解决方案创建新的Sitecore项目。但是当我调用master数据库时,我收到错误Could Not read Sitecore Configuration
。我知道这个问题已被提出,但我提供的解决方案并不清楚。
任何人都可以指导我确切地说我的web.config文件可以覆盖哪些发布值,以便我可以更正它。
提供的另一个解决方案是为网站文件夹上的IIS用户提供编辑/修改访问权限。它对我没用。
public class MyItem
{
public void CreateItem()
{
using (new Sitecore.SecurityModel.SecurityDisabler())
{
Sitecore.Data.Database masterDB = Factory.GetDatabase("master");
Item parentItem = masterDB.GetItem(new ID("{140DC116-E743-4C02-9F08-CB73151A5163}"));
TemplateItem template = masterDB.GetTemplate(new ID("{C9B284A6-0427-4296-8217-E8A3F728D8F0}"));
parentItem.Add("RanjitAsset1", template);
}
}
}
答案 0 :(得分:0)
可能会出现此问题,因为从VS发布解决方案后,默认ASP.net web.config 会覆盖 web.config 。
您可以将您的网站 web.config 文件与干净的sitecore安装文件进行比较吗?
答案 1 :(得分:0)
安德烈是对的。检查web.config,从Visual Studio发布时可能已被覆盖。
<site
name="website"
virtualFolder="/"
physicalFolder="/"
rootPath="/sitecore/content"
startItem="/home"
language="en"
**database="web"**
domain="extranet"
allowDebug="true"
cacheHtml="true"
htmlCacheSize="10MB"
enablePreview="true"
enableDebugger="true" />
如果要切换数据库名称,可以使用桌面模式执行此操作。或者,通过添加?sc_content = [database]作为查询字符串参数。
使用API,您可以使用SoteContext切换上下文,并获取Item。另外,使用SelectSingleItem方法,它会在文件夹中查找Item,如果存在,它会更新它,否则,它会创建它。
<!-- language: lang-cs -->
public class MyItem
{
public void CreateItem()
{
SiteContext targetSiteContext = SiteContext.GetSite(sitename);
using (var context = new SiteContextSwitcher(targetSiteContext))
{
using (new Sitecore.SecurityModel.SecurityDisabler())
{
// do something on the new site context
var title = @"You title goes here";
var parentItem = Sitecore.Context.Database.GetItem(new Data.ID("{140DC116-E743-4C02-9F08-CB73151A5163}"));
var template = Sitecore.Context.Database.GetTemplate(new Data.ID("{C9B284A6-0427-4296-8217-E8A3F728D8F0}"));
var newItem = Sitecore.Context.Database.SelectSingleItem(parentItem.Paths.Path + "//*[@@name='" + title + "']") ?? template.CreateItemFrom(title, parentItem);
try
{
newItem.Editing.BeginEdit();
newItem.Fields["NewsTitle"].Value = title;
//Rest of the fields go here
newItem.Editing.AcceptChanges();
newItem.Editing.EndEdit();
}
catch (Exception ex)
{
Diagnostics.Log.Error("Crawl Error: ", ex);
newItem.Editing.CancelEdit();
}
}
}
}
}