1

我又带着另一个 SharePoint 问题回来了!我有一个应用程序返回本地 SharePoint 场上的功能列表。但问题是,无论它们是否被激活,它似乎都将它们返回为“在线”。例如,即使未激活此功能,它仍会在我的应用程序中显示为“在线”:此功能仍将显示为“在线”

我目前使用的代码如下:

    foreach (SPFeatureDefinition featureDefinition in featureCollection)
            {
                if (featureDefinition.Scope.Equals(scopeSelect))
                {
                    string featureName = featureDefinition.DisplayName;

                        XElement newItem = new XElement("Item", featureName);
                        XElement itemStatus = new XElement("Item", featureDefinition.Status);
                        infoTree.Add(newItem);
                        infoTree.Add(itemStatus);
                    }
                }
            }

问题是 featureDefinition.Status 总是返回“在线”,无论功能的实际状态如何。这让我相信我做错了什么,或者该.Status物业实际上不是我想要的。

我可以使用另一个属性来让我走上正确的轨道吗?

任何指导/建议将不胜感激!

编辑: 顺便说一句,IIS 重置对它返回不同的状态没有任何影响。

4

1 回答 1

2

是的,该.Status属性会告诉您 的状态Definition,但不会告诉您该功能在特定范围内的激活状态。您需要了解一些有关此功能的信息:功能定义只是模板-您在特定级别(农场、网络应用程序、站点、网络)激活该功能的实例-因此您无法检查定义,但需要检查特征的实例是否存在于特定范围内。

要通过 PowerShell 检查功能状态,您可以Get-SPFeature 按照此处所述使用。如您所见,所有代码都在调用 Get-SPFeature,如果它返回特定范围的内容,则该功能被激活。你可以在 C# 中做同样的事情。

因此,当您想检查某个功能是否已激活时,例如在站点范围内,您可以迭代 SPSite.Features,当您找到您知道它已激活的功能时。Powershell commandlet 没有做任何其他事情。

您想要检查农场功能,因此您可以检查集合SPWebService.ContentService.Features以检查激活的农场功能。在此处查看另一个 PowerShell 脚本示例(几乎看起来像 C#)

于 2012-10-15T14:23:11.070 回答