最近公司做了一个Asp.net的应用程序,需要部署到SharePoint2010中,记录操作步骤如下:
注意:SharePoint2010不支持Framework4.0的应用程序,所以在编译时请选择Framework3.5
1.在Sharepoint的Layout下面建立自己应用程序对应的Folder,我的路径是:C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\,建立的Folder叫WF;
2.将应用程序发布至C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\WF下;
3.将WF下Bin里的内容部署至在Sharepoint的站点下的Bin Folder里,我是部署到我80下的Folder中,默认是C:\inetpub\wwwroot\wss\VirtualDirectories\80;
4.将WF下Web.config中的自定义配置信息部署至站点下的Web.config中,本例配置如下:
<section name=”loggingConfiguration” type=”Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″/>
<section name=”loggingConfigurationEnable” type=”Infobase.Component.LogHelper.LoggingEnableConfigurationSection,Infobase.Component.LogHelper”/>
<section name=”localizationConfiguration” type=”Infobase.Component.CustomizeControls.LocalizationConfigurationSection,Infobase.Component.CustomizeControls”/>
<section name=”cachingConfiguration” type=”Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″/>
<section name=”taskStatusConfiguration” type=”Infobase.Component.CustomizeControls.TaskStatusConfigurationSection,Infobase.Component.CustomizeControls”/>
<section name=”urgentLevelConfiguration” type=”Infobase.Component.CustomizeControls.UrgentLevelConfigurationSection,Infobase.Component.CustomizeControls”/>
<section name=”workflowStatusConfiguration” type=”Infobase.Component.CustomizeControls.WorkflowStatusConfigurationSection,Infobase.Component.CustomizeControls”/>
<section name=”loggingConfiguration” type=”Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″/> <section name=”loggingConfigurationEnable” type=”Infobase.Component.LogHelper.LoggingEnableConfigurationSection,Infobase.Component.LogHelper”/> <section name=”localizationConfiguration” type=”Infobase.Component.CustomizeControls.LocalizationConfigurationSection,Infobase.Component.CustomizeControls”/> <section name=”cachingConfiguration” type=”Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″/> <section name=”taskStatusConfiguration” type=”Infobase.Component.CustomizeControls.TaskStatusConfigurationSection,Infobase.Component.CustomizeControls”/> <section name=”urgentLevelConfiguration” type=”Infobase.Component.CustomizeControls.UrgentLevelConfigurationSection,Infobase.Component.CustomizeControls”/> <section name=”workflowStatusConfiguration” type=”Infobase.Component.CustomizeControls.WorkflowStatusConfigurationSection,Infobase.Component.CustomizeControls”/>
<loggingConfiguration configSource=”ConfigFiles\\logging.config”/>
<loggingConfigurationEnable configSource=”ConfigFiles\\loggingenable.config”/>
<cachingConfiguration configSource=”ConfigFiles\\caching.config”/>
<localizationConfiguration DirectUrl=”~/Default.aspx” LocalizationString=”English|en-us,中文|zh-cn” ConnectionString=”" StoredProcedureName=”" TextField=”" ValueField=”"/>
<taskStatusConfiguration TaskStatusValues=”assigned|已指派,cancelled|已取消,completed|已完成,new|待指派,overdue|过期,Reassigned|重指派,removed|已删除” IsCaching=”true”/>
<urgentLevelConfiguration UrgentLevelValues=”紧急|Urgent,普通|Normal” IsCaching=”true”/>
<workflowStatusConfiguration WorkflowStatusValues=”进行中|Running,已取消|Cancelled,已完成|Completed” IsCaching=”true”/>
在我的部署中,有一个ConfigFiles配置文件夹,同样需要拷贝至80下
5. 将AppSetting的自定义信息拷贝拷贝至80下Web.config中对应的节中,我的需要如下:
<add key=”ServerUrl” value=”http://xw:8015/AgilePointServer”/>
<add key=”ProcessAdaptationUrl” value=”http://xw:8015/EnterpriseManager/ProcessAdaptation/LinkedTasks.aspx”/>
<add key=”HostingMechanism” value=”IIS”/>
<add key=”SystemUserDomain” value=”xw”/>
<add key=”SystemUserName” value=”Administrator”/>
<add key=”SystemUserPassword” value=”abcdef”/>
<add key=”PreApplyFolder” value=”../WFForm/”/>
<add key=”LDAPConfig” value=”LDAP://DC=infobase,DC=com”/>
<add key=”DomainName” value=”infobase”/>
6. 将ConnectionString同样拷贝至80下Web.config中对应的节中,我的需要如下:
<connectionStrings>
<add name=”ConnStr” connectionString=”Data Source=xw;Initial Catalog=AgilePoint50;User ID=sa;Password=password” providerName=”System.Data.SqlClient”/>
</connectionStrings>
7. 将Assemblies中的配置信息同样拷贝至80下Web.config中对应的节中,我的需要如下:
<add assembly=”AjaxControlToolkit, Version=3.0.30512.20315, Culture=neutral, PublicKeyToken=28F01B0E84B6D53E”/>
<!–<add assembly=”System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35″/>
<add assembly=”System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A”/>
<add assembly=”System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089″/>–>
<add assembly=”System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35″/>
<add assembly=”System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35″/>
<add assembly=”System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089″/>
<add assembly=”System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089″/>
<add assembly=”System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089″/>
<add assembly=”System.Runtime.Serialization, Version=3.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089″/>
<add assembly=”System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089″/>
<add assembly=”System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35″/>
<add assembly=”System.Data.Services.Client, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089″/>
<add assembly=”System.Data.Services.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089″/>
<add assembly=”System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089″/>
<add assembly=”System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A”/></assemblies>
8. 将pages–>controls中的自定义控件部署至至80下Web.config中对应的节中(需要注意的是这些自定义UC也需要拷贝至80目录下),我的需要如下:
<add tagName=”menu” tagPrefix=”cuc” src=”~/UserControls/Menu.ascx”/>
<add tagName=”griduc” tagPrefix=”cuc” src=”~/UserControls/CustomizeGrid/GridUC.ascx”/>
<add namespace=”AjaxControlToolkit” assembly=”AjaxControlToolkit” tagPrefix=”ajaxToolkit”/>
<add tagName=”ApprovalHistory” tagPrefix=”cuc” src=”~/UserControls/ApprovalHistory.ascx”/>
<add tagName=”ApproveCommentUC” tagPrefix=”cuc” src=”~/UserControls/ApproveCommentUC.ascx”/>
9. 如果使用Session,还需要将session信息配置到Web.config中,配置此信息时,需要将Pages结点的enableSessionState设置为true,默认为flase;
测试过程中需要的到问题:
问题1:Session无法启用,解决方案如下:
1. 打开“管理工具”-“服务”,检查“ASP.NET状态服务”是否处于“启动”状态,如果不是,启动它;
2. 打开 SharePoint应用程序的 web.config文件(如我的建立的80端口的网站的web.config文件路径为:C:/inetpub/wwwroot/wss/VirtualDirectories/80),找到 <httpModules>节点,在<httpModules>节点里添加
<add name=”Session” type=”System.Web.SessionState.SessionStateModule” />。
再找到 <pages>节点,将enableSessionState属性设置为 true;
3. 打开 IIS7 管理器,定位到SharePoint应用程序下,双击打开“模块”,在右键菜单(或者在右侧“操作”窗口)里点击“添加托管模块”,在弹出来的窗口里,名称里输入“Session”,类型里选择“System.Web.SessionState.SessionStateModule, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”。
通过如上应该可以解决Session问题
问题2:在我的项目中使用了资源文件,但是在程序跑起后,报资源文件找不到错误,解决方案如下:
将我们程序的资源文件拷贝至80下的资源文件文件夹中
通过如上部署,应用程序部署成功,谢谢!