上次说到通过PowerShell将项目代码从TFS服务器拿到本地,这次再说说编译和打包的经历
2 编译打包
我相信做过SharePoint2007的都有过打包时恶梦般的经历,Cabinet SDK,VSeWSS,WSPBuilder,文本编辑器… … 来回切换。这时我总是怀念做ASP.NET的日子,开个VS就足够的,舒服呀…
随着SharePoint给MS挣到越来越多的钱,地位也在不断上升,在 VS2010里,SharePoint已经属于First Class级别的支持了!用VS2010我们已经可以直接生成wsp包,并且一键部署到本地环境进行测试,很是给力。那我们是否也能通过MSBuild来直接生成wsp包呢?答案当然是木问题啦。下面是我在做的过程中遇到的问题和解决方法,如果谁有更好的,也和俺Share一下啊
1. MSBuild貌似不能以.sln文件为参数生成解决方案中所包含的SharePoint项目,只能单独调用SharePoint项目文件,一次生成一个wsp包
2. MSBuild中打包的Build Action参数是Package
3. 注意PowerShell中Call Operator ‘ & ‘的用法。具体细节可以查MSDN(废话,嘿嘿)。
下面是代码和注释
#指定MSBuild的路径
$exe = "C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/MSBuild.exe";
#需要编译/打包项目的参数数组,每个项目需要指定4个参数
#[0] 指定项目的路径
#[1] 项目文件名称
#[2] 项目的Build Action 'Package','Comple','Build'...对于SharePoint项目打包成wsp的值应是Package
#[3] 编译时用的配置信息,在VS中可以设置,默认提供‘Debug’,‘Release’
$projects = ,('F:/SolutionA/ProjectA','ProjectA.csproj','Package','Debug'),
('F:/SolutionA/ProjectB','ProjectB.csproj','Package','Debug'),
('F:/SolutionA/ProjectC','ProjectC.csproj','Build','Debug');
#设置编译结果的目标路径
$OutputPath = 'F:/Target';
Foreach($project in $projects)
{
#生成项目文件的绝对路径名称
$projectFile = $project[0]+"/"+$project[1];
$target = $project[2];
$conf = $project[3];
#调用MSBuild进行编译,由于命令以变量的形式存在,需要添加调用操作符'&'
& $exe $projectFile /t:$target /p:OutputPath=$OutputPath /p:Configuration=$conf
}
在学习PowerShell的时候我感觉网上的教程很多,但多以手册查阅为主,如果有时间可以看看Manning的《PowerShell In Action》,现在好像还只有2007年的第一版针对的是PowerShell1.0,感觉讲的还可以, 第2版状态还是MEAP,不给力呀… 除此以外,如果谁有好书也推荐一下。