转载原出处: http://642197992.blog.51cto.com/319331/1582731

注:本文所讲内容以SharePoint2013版本为例,开发工具以VS2013为基础。历史版本也可以参考本文。

WSP:SharePoint Solution Package 解决方案包。

 

一、概念和工具

我们先引出WSP的由来。要想深入了解WSP,要先从SharePoint开发说起。SharePoint可开发的内容比较杂,最新版本的VS2013中已经包含了Sharepoint解决方案的基本模板,从创建到部署整个过程简单易用,比起以前开发解决方案要容易多了。但还是不能脱离SharePoint宿主机环境,不能远程开发和部署。不过SharePoint已经开始了新的编程思路就是SharePoint APP开发,这种开发模式已经可以在客户端编程部署了。

工程师创建好SharePoint解决方案后,对列表库、Web部件、事件、网站模板、工作流等多方面进行编程开发。这一个个的功能就是Feature,那么如何最终把这些功能部署到SharePoint环境中呢,这就需要先把解决方案打包成WSP文件,其实这个WSP文件就是一个cab文件,是个压缩文件,你如果感兴趣可以用rar工具打开这个文件看看。

要想打包解决方案为wsp文件,有很多种方法,以前我用过的方法有

    • WSPBuilder工具命令方式,相关链接CodePlex项目

    • WSPBuilderExtension,一个VS插件,这个比上面的方式更简单

    • SharePoint Software Factory(SP|SF),这是一个Visual Studio扩展工具,最新版本已经支持了VS2013版本,相关链接VS扩展CodePlex项目地址

    • 当然VS2013开发SharePoint解决方案已经可以从上下文菜单中直接部署了。在部署过程中会自动打包解决方案。

    • 当然一些其他第三方的cab生成工具也能帮助我们生成wsp文件,但操作过程还是繁琐复杂一些。

这些工具的使用不是本文所要讲解的部分,如何使用可关注我的博客的其他相关文章吧。

二、WSP部署、更新、删除

先要说明一下:

解决方案分为:增加、安装(又名部署)、更新、收回、删除,

Feature分为:激活、停用

增加解决方案

STSADM和SharePoint PowerShell两种命令,从SharePoint2013开始推荐用PowerShell命令集

STSADM命令示例如下(淘汰的用法):

>stsadm -o addsolution -filename <path>\YourSolution.wsp

PowerShell命令示例如下:

>Add-SPSolution -LiteralPath "wsp路径\文件名.wsp"

对于增加后的解决方案,可到管理中心部署解决方案:

>进入管理中心--系统设置--管理场解决方案,我在这里只引入功能所在位置,不去描述如何具体操作了。操作也很简单,也容易理解。

安装(部署)解决方案

>Install-SPSolution -Identity "YourSolution.wsp" -WebApplication "站点地址" -GACDeployment

更新解决方案

>Update-SPSolution -Identity "YourSolution.wsp" -LiteralPath "<path>\YourSolution.wsp" -GACDeployment -force

收回解决方案

>Uninstall-SPSolution -Identity "YourSolution.wsp"

删除解决方案

>Remove-SPSolution  -Identity "YourSolution.wsp"

注意:删除解决方案前,先要收回解决方案。

获取已增加的解决方案

>Get-SPSolution

解除解决方案的部署锁定

>Remove-SPSolutionDeploymentLock

三、Feature的部署、停用

在一个解决方案中,会包含一个及其以上的Feature,解决方案部署到站点后,可通过命令来控制解决方案中的各个Feature的状态。Feature概念可对应SharePoint解决方案项目中的Features目录里的结构定义。

获得Feature

>Get-SPFeature

上面这个命令可获得farm中的所有Feature,显示“名称、GUID、SharePoint功能版本”

>Get-SPFeature -Identity "<GUID>"

可以获得一个ID是GUID的那个Feature,

安装SharePoint功能

>Install-SPFeature -path "<YourSolution>_<FeatureName>"

卸载Feature

>Uninstall-SPFeature -Identity "<YourSolution>_<FeatureName>"

在给定范围启用Feature

>Enable-SPFeature -Identity "<YourSolution>_<FeatureName>" -URL "<siteUrl>"

在给定范围禁用Feature

>Disable-SPFeature -Identity "<YourSolution>_<FeatureName>" -URL "<siteUrl>"

四、沙箱解决方案

>Update-SPUserSolution

>Install-SPUserSolution

>Uninstall-SPUserSolution

>Remove-SPUserSolution

>Get-SPUserSolution

>Add-SPUserSolution

五、定时器解决方案

安装  AutoSenArvatodMailJob.wsp

1)   Add-SPSolution -LiteralPath "c:\AutoSendMailJob.wsp"
 2)   Install-SPSolution -Identity "AutoSendMailJob.wsp" -WebApplication <siteUrl>  -GACDeployment
 3)   iisreset

4) Disable-SPFeature -Identity "AutoSendMailJob_Feature2" -Url "<siteUrl>" 5)   Enable-SPFeature -Identity "AutoSendMailJob_Feature2" -Url "<siteUrl>" 
 6)  net stop SPTimerV4 
 7)   net start SPTimerV4

更新 AutoSenArvatodMailJob.wsp

1) Disable-SPFeature -Identity "Arvato.BBA.AutoSendMailJob_Feature2" -Url "<siteUrl>"

2) Uninstall-SPSolution –Identity "Arvato.BBA.AutoSendMailJob.wsp" -WebApplication "<siteUrl>" -Confirm:$false  
3) Remove-SPSolution –Identity Arvato.BBA.AutoSendMailJob.wsp -Confirm:$false
4) Add-SPSolution -LiteralPath "c:\Arvato.BBA.AutoSendMailJob2.wsp"
5) Install-SPSolution -Identity "Arvato.BBA.AutoSendMailJob.wsp" -WebApplication "<siteUrl>"  -GACDeployment
6) iisreset
7) Enable-SPFeature -Identity "Arvato.BBA.AutoSendMailJob_Feature2" -Url "<siteUrl>" 8
8) net stop SPTimerV4 
9) net start SPTimerV4

3、删除多余定时器方法

//查看 计时器 "ArvatoBBASendMailTimerJob"
Get-SPTimerJob | ?{$_.Name -match "ArvatoBBASendMailTimerJob"} |ft id,name 
//Set job to a variable
 $job = Get-SPTimerJob -id 59af3540-7ac0-4477-82f9-1f6ab9829aca 
//And delete it.
 $job.Delete()

最后说明一下:VS2013的SharePoint解决方案的bin\debug目录下,编译后会自动打包wsp文件。要想将方案远程部署到企业环境,可拷贝这个wsp文件,写好一个ps1的PowerShell脚本文件。交付给企业系统管理员执行安装就可以。

PS1脚本文件,可以被C#调用执行,这部分的讲解待后续博文摘写,在此说明一下。

以编写备份网站集PS1文件为例:

1
2
Add-PSSnapin Microsoft.SharePoint.PowerShell 
backup-spsite -identity $args[0] -path $args[1] -force

该脚本用了backup-spsite来备份SharePoint网站集,并将网站的URL和备份路径设成两个参数,将其保存成后缀名为ps1的文件,比如backup.ps1

写一个批处理脚本,用于执行备份和写入日志。

1
2
3
4
5
6
7
8
@echo off
SET SOURCE_SITE=
SET DEST=C:\backup\RZH-SP-204_%date:~0,10%.bak
SET LOG=C:\backup\BackupLog.txt
echo %DATE%  %time:~,5%  :开始备份网站:%SOURCE_SITE%>> %LOG%
powershell -command C:\backup.ps1  %SOURCE_SITE% %DEST%
echo %DATE%  %time:~,5%  :网站:%SOURCE_SITE%备份完成>> %LOG%
@echo on

将这个脚本保存成bat批处理文件

不知道大家能否看懂以上代码,在这里我就不说明了。

最后奉献给大家一个完整的安装wsp解决方案的脚本,如果写的还不够完整,请大家告知!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Add-PSSnapin Microsoft.SharePoint.PowerShell
$solutionName "SharePointProject2.wsp"
$webUrl "http://wisdom-moss/"
$path Split-Path -Parent $MyInvocation.MyCommand.Definition
$solution Get-SPSolution | select name
foreach($s in $solution){
    if($s -match $solutionName){
        Write-Host -ForegroundColor Green "Solution '$solutionName' was existed."        
        $deployed Get-SPSolution -Identity $solutionName | select deployed
        if($deployed.Deployed){
            Write-Host -ForegroundColor Green "Start uninstall solution..."
            Uninstall-SPSolution -Identity $solutionName -Confirm:$false -Verbose -WebApplication $webUrl
            #sleep 30s, need uninstall over.
            Start-Sleep -s 30
            Write-Host -ForegroundColor Green "End uninstall solution!"
        }
        Write-Host -ForegroundColor Green "Start remove solution..."
        Remove-SPSolution -Identity $solutionName -Confirm:$false
        Write-Host -ForegroundColor Green "End remove solution!"
    }
}
Write-Host -ForegroundColor Green "Start add solution..."
Add-SPSolution -LiteralPath ($path '\' +  $solutionName)
Write-Host -ForegroundColor Green "End add solution!"
Write-Host -ForegroundColor Green "Start deploy solution..."
Install-SPSolution -Identity $solutionName -WebApplication $webUrl -FullTrustBinDeployment
Write-Host -ForegroundColor Green "End deploy solution!"
Write-Host -ForegroundColor Green "End all executed."

注释:因为我的解决方案被定义为程序集部署目标到WebApplication,所以dll我希望部署到网站集的bin目录下,如果您的解决方案希望部署到GAC,以用于将方案部署的全局,则需要将程序集部署目标到GlobalAssemblyCache。

转载 SharePoint开发部署WSP解决方案包的更多相关文章

  1. 不直接登录SharePoint服务器,通过远程直接部署WSP解决方案包

    在这之前不得不说一下Sysinternals,他最初是一个网站,网站上会经常发布一些有用的系统扩展工具,之后运营这个网站的公司被微软收购.像非常著名的Procmon,AutoRuns.Process ...

  2. SharePoint 2010 部署 WSP 包

    转:http://www.cnblogs.com/myheaven/archive/2011/05/19/2051180.html .net在工程的下面生成了WSP包,在Debug下面.需要放到生产环 ...

  3. 部署解决方案包 (SharePoint Server 2010)

    转:http://technet.microsoft.com/zh-cn/library/cc262995(v=office.14).aspx 本文介绍各个解决方案包,及其在 Microsoft Sh ...

  4. SharePoint 2010 使用Install-SPSolution部署wsp包状态一直是”正在部署”

    1.服务器场信息如下: 2.使用下面命令部署,状态一直是"正在部署" Install-SPSolution –Identity xxxx.wsp –WebApplication h ...

  5. SharePoint 2010 PowerShell 系列 之 备份、还原、部署 .WSP

    转:http://www.cnblogs.com/Fengger/archive/2012/08/24/2654093.html PowerShell系列目录 最近在部署测试环境,就顺便把PowerS ...

  6. NX11.0和VS2013 创建NXOpen 开发模版失败解决方案【转载】

    转载自PLM之家论坛 NX11.0和VS2013 创建NXOpen 开发模版失败解决方案 首先我觉得这个可能是西门子疏忽,基本上每个大版本没有补丁前都有类似问题,下面来说说怎么解决吧.注意这里版本,N ...

  7. SharePoint开发

    做SharePoint开发有时候是一件比较痛苦的事情,毕竟庞大的框架总是笨重的~~ 往往如果采取传统的方式开发SharePoint的话,更改一个代码需要有以下操作: 1)更改代码 2)VS编译——&g ...

  8. SharePoint 2013 本地创建解决方案

    在之前的博客<SharePoint 2013本地开发解决方案以及远程调试>中,我们介绍了如何通过修改注册表,使SharePoint 2013 解决方案可以本地编辑,也提及了即使修改注册表, ...

  9. PowerShell命令部署WSP

    转载:http://www.cnblogs.com/ChunLiangZhang/archive/2012/07/18/2597335.html(作者:ChunLiang) 现在可以用SharePoi ...

随机推荐

  1. easyui源码翻译1.32--datagrid(数据表格)

    前言 此前网上有easyui1.25的源码  应该算是比较老的版本  之后又经历了1.26 . 1.3. 1.31. 1.32 .1.33.1.34  1.33开始支持css3 算是又一个转折  但是 ...

  2. dup和dup2函数以及管道的实现

    疑问:管道应该不是这样实现的,因为这要求修改程序的代码 dup和dup2也是两个非常有用的调用,它们的作用都是用来复制一个文件的描述符.它们经常用来重定向进程的stdin.stdout和stderr. ...

  3. uva 993 Product of digits (贪心 + 分解因子)

      Product of digits  For a given non-negative integer number N , find the minimal natural Q such tha ...

  4. latex 写作

    一.下载:http://www.ctex.org/CTeXDownload 二.bst文件的作用 在tex文件调用bib时,如 \bibliographystyle{Science} \bibliog ...

  5. Java版本的删除指定目录及子目录下名叫“xxx.txt”的所有文件

    以前写过一个python版本的,但是在查找文件路径的时候出现错误,无法正确的获取到文件的路径,就造成无法删除该路径下的“xxx.txt”文件. 当时以为是windows版本系统的错误造成这个问题的,也 ...

  6. redis作为mysql的缓存服务器(读写分离,通过mysql触发器实现数据同步)

    一.redis简介Redis是一个key-value存储系统.和Memcached类似,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录 ...

  7. 如何在一个frame中调用另一个frame中的javascript函数

    1.htm <script language="javascript">function test(){alert("测试")}</scrip ...

  8. APK中java代码反编译

    Android APK中的Java代码可以被反编译到什么程度主要看APK的加密程度. 第一种情况:无混淆无加密无加壳.直接利用Dex2jar和JD-GUI可把源码从APK里抠出来,代码逻辑清晰,基本上 ...

  9. 无法找到.exe的调试信息

    原文:无法找到.exe的调试信息 前天重装了电脑,并配置了Visual Studio2005的VC正则库,boost/regex,运行速度马上快了三倍吧,到底是怎么快的,我还真说不清楚,因为电脑这玩意 ...

  10. 《深入Java虚拟机学习笔记》- 第10章 栈和局部变量操作

    Java栈和局部变量操作 Java虚拟机是基于栈的机器,几乎所有Java虚拟机的指令都与操作数栈相关.栈操作包括把常量压入操作数栈.执行通用的栈操作.在操作数栈和局部变量之间往返传输值. 1常量入栈操 ...