2007年5月12日,星期六

将Web部件部署为功能

这次,我们讨论的是如何将Web部件部署为功能。现在,以手动方式部署自定义Web部件有点麻烦-要使用Web部件,需要满足以下条件:-

  • 包含已编译的Web部件类的程序集将位于GAC(或具有适当CAS策略的站点bin)中
  • 网站web.config中的SafeControls条目,以告知SharePoint此控件是管理员批准的
  • .webpart(或.dwp)双色球推荐一注,其中包含要上传到站点的Web部件库的Web部件定义(配置)

假设用户具有适当的权限,则可以将Web部件添加到Web部件页面上的WebPartZone。首先要说的是,有两种自动执行此过程的方法:

  • 使用VSeWSS创建用于部署Web部件的功能-只需按F5即可部署到本地服务器;这还会生成可部署到其他环境的SharePoint解决方案包(.wsp)。
  • 通过手动创建双色球推荐一注(例如feature.xml,elements双色球推荐一注等)来“手动”创建功能

两种方法都将执行上面列出的3个步骤,以便复制双色球推荐一注并添加SafeControls条目。我不能太强调VseWSS如何完成此过程。此外,当按下F5键时,VSeWSS显然允许简单的调试,但是我必须将.pdb双色球推荐一注复制到GAC层次结构中的隐藏双色球推荐一注夹中才能启用此功能。看到我的文章 如何调试功能接收器 欲获得更多信息。

但是,使用VSeWSS通常意味着对部署选项的控制要少一些,因为该工具会为您编写双色球推荐一注,并且并非所有选项都可以公开供您修改(我将在此详细介绍)。 使用VSeWSS创建列表)。例如,VSeWSS将Web部件程序集部署到GAC(具有完全信任),但是一些SharePoint管理员更喜欢从私有bin双色球推荐一注夹运行程序集,而不是隔离它们可能造成的任何危害。因此,在某些情况下,您可能想使用第二个选项并自己创建功能。本文的其余部分以应部署到bin双色球推荐一注夹的Web部件为例来说明此过程。

开发Web部件后,我们需要创建清单双色球推荐一注,指定特征详细信息,程序集,SafeControls条目和WebPart定义双色球推荐一注(.webpart):


然后,我们需要feature.xml双色球推荐一注,该双色球推荐一注指向elements双色球推荐一注并告诉框架还有另一个双色球推荐一注要处理(即.webpart双色球推荐一注):



elements.xml双色球推荐一注应类似于:



最后,应生成一个.webpart双色球推荐一注以定义该Webpart的元数据和默认属性值。




我将其放置在功能双色球推荐一注下方的双色球推荐一注夹中,其中包含已编译程序集的.dll双色球推荐一注。

假设所有双色球推荐一注都位于正确的位置,则可以使用makecab.exe构建解决方案双色球推荐一注(.wsp)。现在可以部署此解决方案,从而可以完成Webpart部署的手动步骤。一旦熟悉了此过程(并且您已有下一个要复制的双色球推荐一注),此过程就非常简单。

[2007年11月22日更新:对于bin部署,.dll应该位于.wsp双色球推荐一注的根目录-如果它位于子双色球推荐一注夹中,它将被部署到我们不需要的bin目录的子双色球推荐一注夹中。有关更多详细信息,请参见本文的评论。]

请注意manifest.xml双色球推荐一注中的DeploymentTarget =“ WebApplication”指令。这样可以确保将程序集部署到应用程序bin双色球推荐一注夹而不是GAC。现在,大多数Web部件将需要附加的CAS策略来获取执行权限-您的程序集现在将具有默认信任级别WSS_Minimal,因此任何双色球推荐一注io,数据库或Web服务访问都可能会失败。我希望在以后的文章中介绍此条目。

因此,WebPart现在应该位于Web部件库中,并准备添加到页面中。

我还想讨论的一件事是将Webpart添加到页面的不同方法。这些是:-

  • 将Webpart添加到WebPartZone(可以通过使用AllUsersWebPart元素在功能中使用)
  • 通过从SPD拖动将Webpart添加到页面布局的HTML标记中

需要注意的主要事情是,如果您希望能够在更新页面布局本身的过程中更新Webpart配置,则WebPart不应位于WebPartZone中。如果是这样,则webpart属性将存储在webpart存储中,并且更新页面布局(通过功能或手动上传到母版页库)将不会更改任何Web部件属性。但是,请注意,如果零件位于WebPartZone中,则只能由用户编辑Web零件属性。这让我有些困惑,并且是Webpart体系结构要注意的重要方面。

37条评论:

匿名 said...

这是一个天才的博客!
我正为如何从开发到生产部署网站自定义问题而苦苦挣扎,而您涵盖了它的各个方面!这为我节省了大量时间。

克里斯·奥'Brien说过...

很高兴这是有用的Markus ;-)

感谢您的反馈。

C。

未知说过...

您能否解释一下如何制作CAB双色球推荐一注以及随后将其带到另一台服务器(例如Dev或Production)的步骤。我想我也在寻找步骤,因为一旦制作了CAB双色球推荐一注,在开发或生产服务器上部署此CAB双色球推荐一注的步骤/步骤是什么?我真的被困在这里,如果您能解释一下,我将不胜感激。

克里斯·奥'Brien说过...

bk201173-我刚刚在此发布了一篇文章 http://sharepointnutsandbolts.blogspot.com/2007/07/building-and-deploying-sharepoint.html.

如果还有什么不清楚的地方,请对该帖子发表评论。

HTH,

克里斯。

匿名 said...

很棒的博客!!!
我有个问题。
我们可以将Webpart部署到特定网站集而不是部署到Web应用程序中的所有网站集吗?...

提前感谢

克里斯·奥'Brien说过...

塔胡

是的,我99%确信这是可能的-但是,在部署解决方案时,您需要指定要定位的网站集的URL(而不是指定-allcontenturls)。

请记住,底层程序集仍将比网站集更广泛地部署-在GAC的情况下是全局部署,或者在使用Web应用程序的bin目录的情况下至少部署到Web应用程序范围。

干杯,

克里斯。

K先生说过...

你好,

我以与此处所述几乎完全相同的方式部署Web部件。我无法解决的一个问题是,Web部件dll:s不会直接部署到Web应用程序中的BIN双色球推荐一注夹中,而是直接部署到BIN双色球推荐一注夹中的相应双色球推荐一注夹中。换句话说,使用您的确切示例,我的DLL最终将位于bin \ COB.Demo.WebPartDeployment.WriteToFileWebPart \中,而不仅仅是\ bin中。你知道如何解决这个问题吗?

克里斯·奥'Brien说过...

嗨哈梅克,

我写这篇文章时不记得看到这种行为,但我只是做了一些测试,您是绝对正确的。

似乎manifest.xml双色球推荐一注中的Assembly元素不喜欢将“位置”设置为用于bin部署的子双色球推荐一注夹。解决方案是修改.ddf双色球推荐一注,以便解决方案包(.wsp)中具有不同的结构。如果将程序集保留在cab双色球推荐一注的根目录下(并相应地修改manifest.xml中的Assembly / Location属性),则该程序集将被正确部署到bin双色球推荐一注夹的根目录,而不是子双色球推荐一注夹。所有其他双色球推荐一注都可以保留在.wsp的子双色球推荐一注夹中,只有程序集需要移动到根目录。

我想这对我来说不是问题的原因是因为我们很高兴在我们的环境中将Web部件装配体部署到GAC。

对于不准确的行为表示歉意。

HTH,

克里斯。

爱的权利说过...

我有一个问题,但我无法在此处发布示例代码,但其发布在另一个论坛中

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3176344&SiteID=1

我有一个功能接收器,它创建Web部件页面,并为创建的每个页面调用自定义Web部件。

Web部件始终返回null。但是,如果我编辑创建的页面并手动添加Web部件,则Web部件可以正常工作。似乎从功能接收器调用Web部件时,它不会渲染。

克里斯·奥'Brien说过...

你好

我只是在上面的链接中查看了您的示例代码,但看到您已经找到了解决方案。好东西..

克里斯。

匿名 said...

克里斯(Great Post Chris),这对我自动化Web部件的部署有很大帮助。

但是我确实有一个问题。激活该功能并将其停用后,它不会从Web部件库中删除这些Web部件。

据我所知,当禁用Web部件功能时应删除Web部件。请帮我。

谢谢,
555

克里斯·奥'Brien说过...

@ 555,

我认为这是预期的行为,在停用功能后,不会从图库中删除Web部件。

但是,您可以通过使用功能接收器从图库中删除零件来构建它。

HTH,

克里斯。

苏米特·库马尔·多米扬说过...

克里斯,你好

好文章!感谢您为此付出的辛勤工作。我在这里有一个问题。

我可以为特定的网站集或Web应用程序部署功能吗?我不希望其他网站集或Web应用程序在“功能”列表中看到它。

谢谢,
住友

克里斯·奥'Brien说过...

嗨Sumit,

答案是,这取决于功能中的内容。的 范围表中的元素 列出了可以部署到每个级别的功能元素。

如果仅将内容部署到单个网站集,则该内容不会显示在另一个网站集的“网站集功能”列表中。

HTH,

克里斯。

阿塞法说过...

我认为我们无法为特定的网站集或Web应用程序部署功能,即使我们在wsp分离过程中传递了特定的网站集url或webapps也是如此。我们将Features安装在12 \ Template \ Features目录中。因此,安装后,我们将在各处看到功能不受其范围限制的功能。功能范围仅定义可以激活和停用功能的上下文。我们甚至看到在功能安装后创建的Web应用程序中的功能。无论范围如何,这都是事实。我们在解决方案部署过程中传递的url / webapps确定将Web应用程序资源双色球推荐一注,dll等放置在何处,而不是功能本身。基本上,这就是我们安装功能的方式。没有sitecollection网址或webapps参数
stsadm–o installfeature –双色球推荐一注名(Feature.xml双色球推荐一注相对于12 \ TEMPLATE \ FEATURES双色球推荐一注夹的路径)

让我知道我是否想念什么。我花了很多时间研究这个问题,这就是我发现的。

谢谢,
阿塞法

匿名 said...

嘿,我可以在一个goo中将多个Webpart部署为功能吗?

要么

在一个WSP中,我可以有多个Web部件,这些Web部件作为功能部件进行部署。

<现在我发布为匿名>

克里斯·奥'Brien说过...

是的,您可以-功能中元素(例如Web部件)的数量或解决方案中功能的数量没有限制(AFAIK)。

通常将事物组合在一起(如果它们具有相关功能)是最有意义的。

HTH,

克里斯。

匿名 said...

好文章!

我有问题。我已经在Microsoft Windows Server 2003企业版SPI中安装了Sharepoint Services 3.0。安装后,我打开SharePoint 3.0管理中心。但是,我无法访问“操作和应用程序管理”选项卡。出现错误:访问被拒绝!

如果您能告诉我如何解决问题,将不胜感激。

谢谢

最好的祝福
辛迪谭

克里斯·奥'Brien说过...

辛迪

这可能是由于您的帐户没有正确的SharePoint权限(例如,它是服务器场管理员?)或管理中心网站上的IIS设置。建议您尝试将后者改为匿名访问作为测试。

HTH,

克里斯。

克里斯·佩蒂格鲁(Chris Pettigrew)说过...

嗨克里斯,

我能在GUI中创建一个CQWP并将其导出,所以我有cqwp.webpart。然后,我该如何包括它并进行更改以添加为易于部署的功能?我正在努力弄清楚如何将其添加到清单等...因为它只是一个xml文档...

谢谢

未知说过...

克里斯,你好

很棒的帖子。我花了一天的时间来创建解决方案并将其部署在sharepoint中。但是我遇到了Web部件页面的问题。我使用模块/双色球推荐一注标签来部署具有Webpart的aspx双色球推荐一注。但是,每次我重新部署解决方案时,Web部件都会不断添加到现有内容中,从而导致重复。我猜这是因为aspx双色球推荐一注没有作为取消部署的一部分被删除。将aspx双色球推荐一注作为“可托管”添加到根URL(http://servername/my.aspx)下。如何删除该双色球推荐一注?

Jagannath

克里斯·奥'Brien说过...

@Jagannath,

是的,我已经看到了这个“重复的Web部件”问题。我认为发生这种情况是因为配置框架并不是真正设计用来以这种方式处理功能重新激活-它主要是关于一次性双色球推荐一注配置。一些建议:-

-如果仅对“模块”元素中定义的双色球推荐一注进行更改,则应该发现STSADM -o upgradesolution将更新.aspx,但不会导致重复的Web部件。
- 如果你 需要重新激活功能(例如,因为您更新了功能双色球推荐一注),您可能需要编写脚本来删除重复的Web部件(使用SPLimitedWebPartManager)

HTH,

克里斯。

克里斯·奥'Brien说过...

@克里斯,

因此,您有了.webpart双色球推荐一注。实际上,您只需要按照本文中详述的其他步骤将其部署到Web部件库中,以便用户可以选择您的自定义版本。

HTH,

克里斯。

匿名 said...

您的文章辅助。首先,我们将示例作为img制作,因此无法复制代码。其次,它们被剪切,文本只是部分可见。第三,有一个关于

< metaData >
< type name="TitleWP.TitleWP,TitleWP,版本= 1.0.0.0,文化=中性,PublicKeyToken = 9f4da00116c38ec5" / >

该名称必须与PublicKeyToken一起使用。

I'在整个F-G晚上度过,试图了解为什么我的Web部分不'工作。修复错误或删除文章,因为它不仅无用,而且有害。

顺便说一句,gj示例:

http://www.theartofsharepoint.com/2007/05/how-to-build-solution-pack-wsp.html

克里斯·奥'Brien说过...

@匿名,

感谢您的反馈。要点:

-同意代码示例比由于不能复制/粘贴而可能没有的有用。写这篇文章是在向Blogger添加代码示例之前很容易的,不幸的是,我还没有时间回头重写我的一些早期文章,例如这篇文章。
-我的代码/ XML示例来自一个100%正常工作的示例,因此尽管您的场景中可能需要一个四部分的程序集名称,但我敢肯定我不在我的范围内。同意强命名是一种好的做法,但是如果部署到GAC,则当然是强制性的

由于其他人对该文章发表了积极的反馈,因此,恐怕我不会根据您的意见将其删除。抱歉,您没有发现它有用。

克里斯。

匿名 said...

我同意,该帖子仅供参考,不能复制,也无法提供任何示例供下载。总体而言,该职位很好。我不想批评你。我仍然需要搜索以查找更多信息,并找到了类似的信息-
http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2008/10/22/intro-to-sharepoint-development-how-to-build-and-deploy-a-web-part.aspx

尼米什·阿加瓦尔 said...

克里斯,你好

我知道将Web部件部署到Web部件页面的两种方法。

1.将Web部件.dll复制到bin双色球推荐一注夹,将安全标签添加到web.config,然后添加到Web部件页面。

2.创建.CAB双色球推荐一注,然后使用stsmd命令进行安装,然后将Web部件添加到Web部件页面。

以上两种方法都需要访问安装了共享点并正在运行共享点的服务器。

有什么方法可以直接从Sharepoint站点部署Web部件而无需访问服务器?

谢谢,
尼米什人

未知说过...

克里斯,你好

基本上,我需要在共享点服务器上部署Web部件,但是问题是我无权访问服务器。

有什么办法吗

谢谢
-萨加尔

克里斯·奥'Brien说过...

@Nimish,

如果您想在不经过有权访问服务器的人员(例如管理员)的情况下,使新的Web部件可供选择,那么恐怕答案是否定的。

通常,您使用的第二种方法是-如果没有此过程就可以使Web部件可用,则在大多数环境中,这将是巨大的安全性/稳定性风险:-)

HTH,

克里斯。

克里斯·奥'Brien说过...

@Sagar,

请参阅以前对Nimish的评论:-)

克里斯。

阿曼说过...

克里斯,你好

我有一个查询。假设我正在将一个dll部署到GAC和BIN双色球推荐一注夹中,然后如何确定是使用GAC的dll还是使用Bin双色球推荐一注夹的DLL。

克里斯·奥'Brien说过...

@Aman,

我的第一个问题是为什么要同时部署到bin目录中 和GAC?我可以'真的没有想到一个有效的案例,甚至不确定.wsp框架是否支持它。

无论如何,为了以正常方式加载程序集,.Net将 总是 首先从GAC加载程序集,因为此位置是'probed'早于bin目录。

HTH,

克里斯。

说过...

克里斯,你好
.ddf双色球推荐一注在哪里?如果您可以在具有更多屏幕截图的示例项目中进行演示,那也将很棒。

问候,

克里斯·奥'Brien说过...

@Ven,

自本文以来,发生了几件事-我'd现在建议使用 WSPBuilder 它将创建manifest.xml,ddf双色球推荐一注,并从中为您创建WSP软件包。它'是SharePoint 2007开发中常用的一种非常流行的工具,并且无需弄乱ddf双色球推荐一注。

但是,您仍然需要feature.xml和feature元素双色球推荐一注。

HTH,

克里斯。

罗伯特·拉科维兹 said...

给定的xml示例没有意义,因为您是通过解决方案(.wsp)部署Webpart的。当您在解决方案中包含时,您不会'不再需要整个功能。

另一方面,可以通过在解决方案XML中不包含标签来使用该功能来部署Webpart。

使用功能部署,您还可以为特定的SiteCollection或什至仅网站(网站)激活它。

克里斯·奥'Brien说过...

@罗伯特·拉科维茨,

XML示例没有什么意义?如果你 '重新使用工具在后台生成其中一些双色球推荐一注(例如WSPBuilder,STSDEV,WSeWSS),那么我同意*您*无需创建它们(例如第一个屏幕截图中的manifest.xml),但是确实可以!这篇文章使用了3年之久,当时这些工具还不存在或不常用,这也许可以解释一些问题。

I'd喜欢回去用更新的技术来更新这样的文章,但是后来我'd从不写新文章,反馈表明'对大多数读者来说更有用。就是说,我在最近讨论了更多最新技术 我最喜欢的SharePoint 2007开发技术(着眼于SP2010)。

希望's of some use.

克里斯。

未知说过...

克里斯,你的文章真棒