我正在使用Heather Solomon的最小发布母版页,我有一个简单的功能,包含apsx页面和代码隐藏文件,可以执行此操作
public class SSInformPage : Page
{
protected Literal Literal1;
protected override void OnLoad(EventArgs e)
{
//base.OnLoad(e);
try
{
HttpContext.Current.Session["Name"] = "Mr Ben";
Literal1.Text = string.Format("{0} {1}", HttpContext.Current.Session["Name"].ToString(), Session.SessionID);
}
catch (Exception ex)
{
Literal1.Text = string.Format(ex.Message.ToString());
}
}
}
当此页面在浏览器中加载时,我收到以下错误
未将对象引用设置为对象的实例。
然而,如果我切换到开箱即用的主页(例如Black Vertical),代码就可以了!我得到了“Mr Ben {会议ID}”的预期输出
我甚至创建了一个新的空白母版页,并将黑色垂直母版页的全部内容复制到其中。我将网站设置为这个新的母版页,我加载页面,期望一切正常,并收到'对象参考...'错误。这是如何运作的?它是完全相同的母版页,但代码只有在它是OOTB版本时才有效。
我在中央管理员中启用了会话状态,web.config文件和程序集已部署到GAC。
更新 从另一个论坛的建议看来,它似乎是一个信任问题,我错误地认为解决方案部署到GAC,它实际上是部署到Bin文件夹。我试图重置这个,但似乎无法让WSPBuilder部署到GAC的解决方案,虽然我已经设法让它停止部署到Web应用程序的bin文件夹。
有谁知道如何将解决方案部署到GAC文件夹?这是我的stsadm命令
stsadm -o deploysolution -name Test.SessionState.Solution.wsp -immediate -url http://example -allowGacDeployment -allowCasPolicies -force
Udpate 2 不,这不是信任问题,我重新创建了我的解决方案并确保它部署到GAC。如果我在sharepoint designer中打开OOTB母版页并单击“保存”按钮,它将“自定义”页面。一旦我这样做,我的代码就会停止工作,如果我然后将母版页重置回网站定义我的代码又开始工作了!
我有一个soltion文件,任何人都想安装它来查看行为。
答案 0 :(得分:1)
我想我找到了原因,似乎自定义母版页包含在解决方案中,这个问题不会发生(大部分时间)。
这是一篇列出问题和可能的工作的文章
https://stackoverflow.com/questions/981836/perform-find-and-replace-in-visual-studio-build-events
答案 1 :(得分:0)
我无法解决您的具体错误,Heather的母版页应该可以正常工作,但我担心您在web.config文件中提到启用会话状态。 SharePoint管理中心使用instructions here确定了正确的位置。
这是因为SharePoint提供了自己的会话管理器,因为会话必须在多个WFE之间共享。如果您真的想以标准的ASP.NET方式执行此操作,请使用Eric Kraus' instructions。但不确定这是多么受支持或者它会引起什么副作用。
尝试其中一种替代方案,让我们知道它是如何进行的。希望错误消失!