版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shrenk/article/details/87930926
SharePoint Server 2019已经发布了,最大的变化是添加了新UI。但是2019的主版本号仍旧是16。总结了三个使用代码判断SharePoint 2019版本的办法。
1,通过build number, SharePoint 2016的build number列表:https://social.technet.microsoft.com/wiki/contents/articles/34002.sharepoint-2016-build-numbers.aspx
我所安装的SharePoint 2019的build number是16.0.10337.12109,其中主版本号是16, build号是10337,而SharePoint 2016的主版本号是16,build号不超过5000,考虑到2016有可能还会有build出来,所以推测2019的build号是大于10000的。判断代码如下。
private static bool IsSharePoint2019()
{
var buildVersion = SPFarm.Local.BuildVersion;
return buildVersion.Major == 16 && buildVersion.Build > 10000;
}
CSOM:
private static bool IsSharePoint2019CSOM()
{
string url = @"http://siteurl";
ClientContext context = new ClientContext(url);
context.ExecuteQuery();
return context.ServerVersion.Major == 16 && context.ServerVersion.Build > 1000;
}
2,通过SKU Id,这个是最准确的。
bool isSP2019= false;
string SharePointProductsRegistryPath = @"SOFTWARE\\Microsoft\\Shared Tools\\Web Server Extensions\\16.0\\WSS\\InstalledProducts\\";
try
{
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(SharePointProductsRegistryPath, false))
{
//Get all of the installed product code/SKUId pairs.
foreach (String value in key.GetValueNames())
{
try
{
//Get the SKUId and see whether it is a known product.
String SKUId = key.GetValue(value) as String;
if (SKUId == "a35df3e6-6069-4d46-9e39-05ed7e8e2d7b" || SKUId == "8662ea53-55db-4a44-b72a-5e10822f9aab")
{
isSP2019= true;
}
}
catch (Exception e)
{}
}
}
}
catch (Exception e)
{
}
return isSP2019;
3,客户端通过_spPageContextInfo对象判断。
前两种方法都是在服务器端,而且有权限的要求才能执行代码。如果在客户端,可以通过_spPageContextInfo这个对象来判断,这个对象在2016和2019中的值是不同的,尤其在2019中,增加了很多新的值,而且在新UI的页面中也可以使用这个对象。
在SharePoint 2016中,_spPageContextInfo对象有30个值:
在SharePoint 2019中,这个对象有120个值了。主要判断某个只有2019中存在的值即可,例如“modernThemingEnabled":
代码:
var isSharePoint2019 = _spPageContextInfo.modernThemingEnabled !== undefined;