我正在开发一个用于部署sharepoint项目的自动脚本。我正在使用沙箱级webtemplate,必须在创建de site时应用。我有很多麻烦,因为看起来像sharepoint缓存webtemplates列表和get-spwebtemplate没有找到新添加的。我的工作方式是:
[system.reflection.assembly]::LoadWithPartialName("Microsoft.Sharepoint")
$site= new-Object Microsoft.SharePoint.SPSite($web_application_complete_url)
$site.OpenWeb().ApplyWebTemplate($web_template_name)
$site.Dispose()
正如您所看到的,我正在使用.net sharepoint api而不是cmdlet。这在PowerShell ISE中很有用,但在PowerShell控制台中,它会抛出有关引用的DLL的异常:
使用“1”参数调用“ApplyWebTemplate”的异常:“无法加载文件 或程序集'XXX.SharePoint.Common,Version = 1.0.0.0,Culture = neutral,PublicK eyToken = 534c125b45123456'或其依赖项之一。系统找不到了 e文件指定。“ 在C:\ Build \ SharePointBuild.p s1:318 char:37 + $ site.OpenWeb()。ApplyWebTemplate<<<< ($ web_template_name) + CategoryInfo:NotSpecified:(:) [],ParentContainsErrorRecordE xception + FullyQualifiedErrorId:DotNetMethodException
在sitecollection中安装Web模板沙盒解决方案时,程序集在GAC中完美注册。
有什么想法吗?谢谢!
答案 0 :(得分:1)
您是否有可能运行64位ISE和32位PowerShell控制台(反之亦然)?如果不是那么另一个区别是ISE在COM STA模式下运行,而PowerShell控制台默认在MTA中运行。这只有在SharePoint使用COM(我认为它)的情况下才有意义。您可以通过在STA模式下运行PowerShell控制台来验证这一点,如下所示:
C:\> Start-Process PowerShell -arg -sta
假设您使用的是PowerShell 2.0 for Start-Process cmdlet。