2007年7月22日,星期日

构建和部署SharePoint解决方案包

以下 其他地方留下的评论 在此博客上,我想我会确切介绍什么是SharePoint解决方案包,包括 如何构建它们并将其部署到其他SharePoint环境。

首先,让我们确切地了解什么是Solution软件包。注意我使用的是大写S的“解决方案”  在本文中,以区分我们在此处讨论的内容和技术的总体思路 使用SharePoint构建的解决方案。 解决方案是SharePoint的程序包 要部署的项目-从物理上来说,这是一个文件箱(.cab),其扩展名为.wsp 区别于标准 .cab files. 该博客上的其他文章介绍了使用SharePoint功能来部署功能的想法,因此,让我们也清楚了解功能和解决方案之间的关系。 一般而言, 仅使用功能无法完成的任务 能够 解决方案包括:

  • 部署某些文件 到文件系统,例如工作流或Web部件的程序集,自定义文件,这些文件将驻留在‘12’ folder 
  • 部署Web部件定义文件(.webpart)
  • Web.config修改,例如的‘SafeControls’自定义Web部件所需的条目
  • 代码访问安全性配置修改,例如非GAC运行的自定义Web部件所需的那些

In addition to being able to do these things, 解s 能够 也 contain Features. 我的想法是解决方案 包裹 功能。 实际上,我始终建议即使不需要(例如,我们在上面的列表中没有做任何事情),也始终将功能部署为解决方案的一部分。 原因是解决方案框架负责 将所有必需的文件部署到SharePoint场中的所有Web前端(WFE)服务器。仅此一项就对可重复部署的工作非常有用,并确保您的WFE保持同步。

如何指定解决方案

用于指定解决方案包组成的关键文件是manifest.xml文件。回到我的 有关部署Web部件的早期文章,该方案的manifest.xml文件如下所示:

< xmlns="http://schemas.microsoft.com/sharepoint/" 解决方案编号="122C0F04-78B7-4d42-9378-6F8B4F93ADD1">

  <功能清单>

    <!-- 注意,这是cab文件中的位置! -->

    <FeatureManifest 位置="COB.Demo.WebPartDeployment.WriteToFileWebPart \ feature.xml" />

  </功能清单>

  <装配体>

    <部件     位置="COB.Demo.WebPartDeployment.WriteToFileWebPart \ COB.Demo.WebPartDeployment.WriteToFileWebPart.dll"

        部署目标="GlobalAssemblyCache">

      <安全控制>

        <安全控制 部件="COB.Demo.WebPartDeployment.WriteToFileWebPart,COB.Demo.WebPartDeployment,版本= 1.0.0.0,区域性=中性,PublicKeyToken = 9f4da00116c38ec5"

                    命名空间="COB.Demo.WebPartDeployment"

                    安全="真正"

                    类型名称="*" />

        </安全控制>

    </部件>

  </装配体>

  <Dwp文件>

    <Dwp文件

     位置="COB.Demo.WebPartDeployment.WriteToFileWebPart \ COB.Demo.WebPartDeployment.WriteToFileWebPart.webpart "

      文档名称="COB.Demo.WebPartDeployment.WriteToFileWebPart.webpart" />

  </Dwp文件>

</>


这是假设将Web部件部署到GAC -在此示例中,这是比部署到Web应用程序的bin目录(其中还需要代码访问安全性(CAS)策略)更简单的方案。有效地,清单指定了解决方案包包括以下内容:

  • 具有名为“ feature.xml”的头文件的功能
  • 部署到名为“ COB.Demo.WebPartDeployment.WriteToFileWebPart.dll”的GAC的程序集
  • 应用程序的web.config文件的SafeControls部分中的一个条目,指定指定程序集中的所有类型都应视为安全
  • 一个名为“ COB.Demo.WebPartDeployment.WriteToFileWebPart.webpart”的Web部件定义文件-该文件将部署到站点上的Web部件库中

重要的是,manifest.xml文件中的所有这些详细信息仅在部署生成的解决方案包时由SharePoint使用。它们实际上是说“去从.wsp文件中获取该项目并将其放在此处”的说明。生成.wsp文件的实际过程是另一项任务。


建筑解决方案包

有2个用于构建实际软件包的选项-使用makecab.exe手动构建,或使用自动化解决方案-有几种社区开发的工具/技术可用。由于了解此类过程中实际发生的情况始终是一种很好的做法,因此我们将在此处介绍如何手动进行。

第一步是编写一个.ddf(钻石指令文件)。这是一组说明 makecab.exe有关如何在内部构建文件夹层次结构的信息 .cab file. For my web part example, my file 好像:

.OPTION明确

.Set CabinetNameTemplate =“ COB.Demo.WebPartDeployment.WriteToFileWebPart.wsp” 

.Set DiskDirectory1 =“ Package”

; ***

 

manifest.xml

 

; **此目录名称用于12 \ TEMPLATE \ Features下的文件夹名称,因此应

; **与您要调用的功能匹配!

.Set DestinationDir = COB.Demo.WebPartDeployment.WriteToFileWebPart

elements.xml

feature.xml

 

.Set DestinationDir = COB.Demo.WebPartDeployment.WriteToFileWebPart

WebPart \ COB.Demo.WebPartDeployment.WriteToFileWebPart.webpart

WebPart \ COB.Demo.WebPartDeployment.WriteToFileWebPart.dll

 

; ***


该文件告诉makecab.exe执行以下操作:

  • 创建一个名为'COB.Demo.WebPartDeployment.WriteToFileWebPart.wsp'的.cab文件
  • 将“ manfest.xml”文件放在层次结构的根目录中
  • 将'elements.xml'和'feature.xml'文件放入 名为“ COB.Demo.WebPartDeployment.WriteToFileWebPart”的子文件夹
  • 也 将另外2个文件(扩展名为.webpart和.dll)放在同一文件中 subfolder, but that makecab.exe应该在主文件系统“ WebPart”的子文件夹中查找这些文件。

然后,使用以下命令行命令将此指令文件传递到makecab.exe:

D:\ 解Deployment \ Development \ COB.Demo.WebPartDeployment>“ C:\ Program Files \ Microsoft Cabinet SDK \ BIN \ MAKECAB.EXE” / f COB.Demo.WebPartDeployment.ddf


这里要注意的几件事。在命令提示符下,我们确保当前目录是所有解决方案文件所在的目录。这样可以确保我们可以解析上面.ddf文件中的相对引用。我们传递/ f参数以指示我们正在传递指令文件,还传递该文件的位置。

假设所有文件/引用 没关系,这将产生一个扩展名为.wsp的.cab文件,该文件将在当前目录“ Package”下的子文件夹中创建(如果该文件夹不存在,则会为您创建该文件夹)。现在,我们有一个解决方案包,可以将其部署到另一台SharePoint服务器。但是首先让我们看一下-可以通过将扩展名临时重命名为.cab来完成。然后,您应该看到类似以下内容:



将解决方案部署到其他SharePoint服务器

最后一部分是实际部署解决方案。首先,必须将.wsp文件复制到目标服务器,然后我们将使用STSADM(SharePoint的命令行管理工具)实际部署解决方案。以下是用于执行部署的命令:

stsadm -o addsolution-文件名COB.Demo.WebPartDeployment.WriteToFileWebPart.wsp

stsadm -o部署解决方案-名称COB.Demo.WebPartDeployment.WriteToFileWebPart.wsp
   -url http:// myWebApplication -immediate -allowGacDeployment -allowCasPolicies -force


第一个命令只是将解决方案包添加到config数据库中SharePoint的解决方案存储中,第二个命令实际上将包部署到指定的Web应用程序。这些区域在SDK的以下部分中已得到很好的覆盖: http://msdn2.microsoft.com/en-us/library/aa544500.aspx.

并非每次您希望部署程序包时都在命令行上编写这些命令,而是随着时间的流逝,您会将这些命令打包到可以工作的STSADM脚本中。作为示例,我在Webparts示例中使用的脚本 looks like:

:开始

@回声关闭

 

设置solutionName = COB.Demo.WebPartDeployment.WriteToFileWebPart

设置url = http:// myWebApplication

设置featureName = COB.Demo.WebPartDeployment.WriteToFileWebPart

@set PATH = C:\ Program Files \ Common Files \ Microsoft Shared \ Web服务器扩展\ 12 \ BIN;%PATH%

 

echo ---试图停用/收回现有解决方案...

 

stsadm -o deactivatefeature -name%featureName%-url%url%-force

stsadm -o收缩解决方案-name%solutionName%.wsp -url%url%-立即

stsadm -o execadmsvcjobs

stsadm -o deletesolution -name%solutionName%.wsp -override

rem stsadm -o execadmsvcjobs

 

echo ---将解决方案%solutionName%添加到解决方案存储中...

 

stsadm -o addsolution-文件名%solutionName%.wsp

 

如果errorlevel == 0转到:deploySolution

 

echo ###添加解决方案%solutionName%时出错

回声。

转到结尾

 

:deploySolution

echo ---部署解决方案%solutionName%...

 

stsadm -o deploysolution-名称%solutionName%.wsp -url%url%-立即-allowGacDeployment -allowCasPolicies -force

stsadm -o execadmsvcjobs

 

如果errorlevel == 0转到:activateFeature

 

echo ###部署解决方案%solutionName%时出错

回声。

转到结尾

 

:activateFeature

 

echo ---激活解决方案%solutionName%...中的功能

 

stsadm -o activatefeature -name%featureName%-url%url%-force

 

如果errorlevel == 0转到:成功

 

echo ###激活功能%featureName%时出错

回声。

转到结尾

 

:成功

echo成功部署的解决方案和已激活的功能。

回声。

转到结尾

 

:结束

暂停


以下 the script through, this basically does the work of safely upgrading the 解 (in case it has been deployed previously), and 也 activating the Feature within the 解.


自动化解决方案构建

之前我们提到 使构建和部署解决方案的过程自动化的想法。这个区域有几种社区工具/想法,我知道的几个是:

都 这些中的有效使用Visual Studio生成后事件 自动生成.wsp软件包。

此外,微软的 Windows 的SharePoint Services的Visual Studio扩展 有效地执行相同的任务。尽管当前版本中有些不灵活,但此VS的附加组件意味着通过按F5按钮可以使整个过程自动化。  如果您不知道这一点,我建议您看看。我的帖子 使用VSeWSS创建列表 概述了针对特定场景使用它的情况。

41条评论:

布莱恩·T说过...

克里斯早晨

一位好克里斯的帖子很清楚。

阿南德·波帕尔(Anand Bhopale)说过...

克里斯,你好

我面临的问题很少。

1.我有一个功能,其中我正在使用ReceiverAssembly(使用强名称)。

2.托管SharePoint服务器场的服务提供商公司不允许在GAC中进行任何代码部署。每个程序集都应从Web应用程序的bin文件夹中加载。

3.我尝试在清单文件中使用自定义CAS策略。 (我不确定确切的政策要素是什么)。

4.当我尝试部署解决方案时,出现以下错误

无法安装功能'aaec2e08-1ccf-4712-ae5e-a33bea53a325',因为加载了事件接收器程序集

必须将ReceiverAssembly放入GAC。

谢谢,

阿南德

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

嗨,阿南德,

是的,我还没有机会进行测试,但是99%确信功能接收器组件必须位于GAC中。

HTH,

克里斯。

凯特说过...

克里斯-请帮忙!我已经为此花了将近一个星期的时间。所以我下载了这个Web部件
(http://weblogs.asp.net/paulballard/archive/2007/05/01/sharepoint-moss-2007-forms-based-authentication-login-registration-web-part.aspx)
并使用随附的setup.bat文件进行安装,即可正常工作。但是,我需要向注册页面添加一些自定义字段,因此我适当地更改了代码,但似乎无法对其进行更新。我不知道如何部署它。您能解释一下其中包含的文件层次结构吗?我不知道是什么。我想更新wsp文件,但无法更新它,并且不太了解清单,因为我需要考虑登录代码和验证码。我好沮丧!你能帮助我吗?! :) 谢谢!

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

凯特,

您需要使用更新的文件重建解决方案软件包(.wsp),并使用STSADM -o 升级solution重新部署解决方案。

为此,您将需要原始.ddf文件或重新创建它,这会稍微困难些。 Web部件作者是否在zip文件中提供了它?

假设您拥有.ddf文件,则应按照本文第二部分中的过程重新生成解决方案。

HTH,

克里斯。

凯特说过...

克里斯-感谢您的回复!不,zip文件中没有ddf文件:(我试图从在线阅读的文章中构建一个ddf文件,虽然能够成功完成,但是仍然没有更新:-/我想我的问题是-是webpart直接引用.cs文件吗?我更改了.cs代码,但是当我构建ddf时,我认为它是在.webpart文件和.xml文件的基础上建立的...对吗? zip中的文件故障?如果不能,我可以描述故障-太多的文件使我不确定所有文件是否都正确更新,并且我不太了解它们之间的关系。

凯特说过...

抱歉-另一个问题-当我尝试updatesolution时,提示“缺少操作名称或操作名称无效”

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

凯特,

设法看看。我认为您需要执行以下操作:

-在.cs文件中更改代码
-重新编译程序集-由于作者没有提供原始的密钥,因此您需要使用自己的强键对程序集进行签名
-在任何文件(例如manifest.xml)中更改对程序集的任何引用,以反映新的公共密钥令牌(以及增加的版本号)
-使用makecab.exe和您的.ddf文件重建.wsp文件。要确保的是,生成的.wsp文件具有与原始文件相同的结构-通过将二者重命名为.cab并检查其内容进行比较。请特别注意每个文件的“路径”。
-使用STSADM升级解决方案-o 升级solution。请注意 升级解决不了 更新解决方案,根据您的其他评论!

假设它们没有错误,则应检查已更新的程序集是否已部署到GAC中-确定版本号可能会有所帮助,否则,请在运行upgradesolution命令之前删除程序集。

本质上,任务是与更新的文件以相同的格式重建.wsp软件包,然后运行upgradesolution。

祝你好运

克里斯。

凯特说过...

克里斯(Chris),到目前为止,您提供了很棒的帮助。我已经按照说明进行了所有操作,使wsp的结构与旧版本相同,重新构建了所有内容,更改了键,版本,但是每次我调用升级时,即使事先删除了程序集,它仍然会像旧版本一样重新出现版本和密钥。当我尝试从setup.bat运行包含的卸载时,它给了我错误。您将如何建议您删除旧版本并从我的代码重新开始?

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

嗯,这对我来说好像是旧程序集在.wsp中?

将.wsp文件重命名为.cab会发生什么?然后,您可以“提取”或“复制”来访问软件包中的文件-软件包中内置的程序集是否绝对是您的更新版本?

C。

凯特说过...

原来我将我的构建的输出位置设置到了错误的位置,因此您正确地认为驾驶室中包含的dll不是正确的dll。

好吧,我希望这是我的最后一个问题...

当我升级解决方案时,它给我一个错误:default.aspx的“找不到文件”页面,我不知道如何解决此问题并弄清楚找不到什么文件...而且,我也不知道为什么会发生这种情况当我没有删除任何东西... :(

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

嗯,我不确定那怕什么。

如果您需要在解决方案中包括文件,则可能需要使用'Module'和'File'元素在正确的位置配置文件。

这些元素是否在原始.wsp文件中的elements文件中?您可以通过重命名为.cab并再次检查内容来进行检查。

C。

匿名 said...

克里斯

感谢您成为Sharepoint问题解决者的天使。您花时间回复这些博客本身的事实表明,您应该得到荣誉和桂冠。感谢您的努力,时间和耐心。


这个博客确实帮助我了解了部署过程。当我阅读它时,我想念了我错过的一个小事实。很好,现在我的webpart可以了。

(我在Visual C#中使用VS2005 Sharepoint模板),它会自动创建.wsp和setup.bat文件。您只需要获取这两个文件并将其放在目录中的服务器(开发,测试等)上,然后运行setup.bat。这样可以很好地部署webpart。):)

再次感谢。

bk201173

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

bk201173,

感谢您的反馈意见!我真的很感激。有时很难知道这些信息是否有用,因此很高兴听到人们的声音。

感谢您抽出宝贵时间发表评论。

克里斯。

匿名 said...

克里斯需要您的帮助...

我正在VM上进行开发,并且正在使用VS2005 Sharepoint
模板。在C:\上的笔记本电脑(lclt011296)上,我有一个.mdb文件。在VM中(VM位于我的笔记本电脑上)时,我
在VM上使用VS2005项目,我可以制作原始访问文件的副本,
并从副本中读取并使用VM中的fileInfo类将其删除。但是当我尝试
与VM上的webpart.cs相同,我收到一条错误消息,它找不到文件。

例如,这在正常的VS2005项目中有效
1. FileInfo fiInfo = new FileInfo(“ \\\\ lclt011296 \\ d $ \\ DATA.mdb”);
2. fiInfo.CopyTo(“ \\\\ lclt011296 \\ d $ \\ CopyData.mdb”,true);

但是在我的webpart项目中,第2行错误说“找不到文件
\\ lclt011296 \ d $ \ data.mdb“

所以我的问题是,为什么我会通过webpart执行得到该错误
以及执行webpart的用户名是什么,以便我可以授予适当的访问权限
到网络.mdb文件。

如果我的解释不清楚,请告诉我。

任何帮助深表感谢。谢谢。

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

好的,因此您已经测试了Web部件中的代码是否在非SharePoint上下文中运行-这是我要说的重要测试,现在我们知道该代码还可以,但是问题是与“ 的SharePoint相关”的。

Web部件代码将在该站点已配置为使用的IIS应用程序池的标识下运行。您应该检查该帐户对文件具有适当的NTFS权限。

还要考虑一下,如果您的Web部件的程序集不在GAC中(即,它是从站点bin目录中运行的),则默认情况下它将不会以“完全信任”的形式运行。但是,如果这是问题,我希望看到的是安全异常,而不是看到的“找不到文件”错误。

HTH,

克里斯。

交流电说过...

克里斯-
感谢您引用我的文章。我希望有一个更广泛的解决方案,并尽快更新帖子。

-交流

匿名 said...

克里斯,你好
感谢提供这篇好文章。实际上,我对wsp文件有一些疑问。我正在使用SharePoint解决方案生成器来创建和部署解决方案。我的怀疑是
1.在SP中,我创建一个Web应用程序,然后部署该解决方案。当我部署时,它可以作为站点模板使用,并且通过部署它不会自动创建站点。对?我们必须通过选择此模板来专门创建一个网站集。如果我错了,请纠正我。创建网站后,我可以看到我创建的所有自定义列表。
2.现在我有一个问题。想象一下,在开发环境中,我修改了一个自定义列表,并在其中添加了一个额外的列。现在必须将此更改部署到生产中。 wsp技术如何为我提供帮助。我尝试再次创建站点定义,并尝试升级解决方案。但这似乎不起作用,
任何帮助将不胜感激。

谢谢
索米亚

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

索米亚

在回答您的问题时:

1.是的,您绝对正确。部署站点定义只会使其可供使用,实际上并不会创建任何站点。这是另一步骤。

2.就更新作为网站定义的一部分部署的项目而言,返回原始网站定义进行更改不是一个好主意。如果现在正在使用它,则可能会造成问题。看到我的文章 创建,部署和更新自定义网站定义 有关此的更多详细信息。

一般来说,需要使用API​​对已创建的商品进行更新(假设我们不想通过Web UI手动进行更改)。

HTH,

克里斯。

匿名 said...

你好克里斯:) ...问候

请记住,我在使用VS2005共享点扩展模板
开发Webparts。

经过大量的努力,我的模拟工作和Webpart的工作都得以完成,
使它处于可部署状态。哇...真是个旅程!

现在,我在解决方案中指定了一些配置项,例如
用户名,密码,access(.mdb)文件的路径,SQL查询等
应该在部署时进行配置。

在部署过程中如何将它们指定为可配置项
有人(例如部署期间的质量控制人员或管理员)可以更改它吗?

谢谢你的帮助

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

嗨bk201173,

这是一个有趣的问题。不幸的是,部署框架中确实没有任何特定的东西可让您以这种方式分离出配置值。我唯一想到的是可以将属性传递给功能,然后可以在功能接收器中使用值,但这听起来不像您想要做的那样。

因此,我认为您需要研究用于存储配置值的通用.Net技术。您可以使用Web应用程序的配置文件的ApplicationSettings部分,并且对命名连接字符串有特殊规定。在我的组织中,我们通常将配置值存储在一个特殊的SQL表中,该表缓存在内存中以便快速检索。但是还有许多其他选择。

希望有一定用处!

克里斯。

匿名 said...

我在机智的尽头...我不知道该怎么办。我以为可能会做Web部件的可自定义属性,但是后来意识到,由于缺少conn设置,Web部件甚至不会显示,所以,更不用说如果出错了我该如何设置属性。我说的对吗?

Web.config文件...听起来不错。也许我可以放我自己的部分并从中读取内容?不知道...将调查这个想法。

另一种方法可能是使用解决方案部署带有配置信息的xml文件并从中读取信息?

感谢克里斯的所有帮助。

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

bk201173,

为配置使用Web部件属性可能是一个很好的解决方案。不过,您需要考虑以下几点:

-需要编写您的代码,以便如果尚未输入配置值,则Web部件不会出错
-每次用户将Web部件添加到页面时,都需要输入配置。除非是,否则,您将Web部件的预配置版本添加到Web部件库中以供他们使用。

否则,从web.config文件或自定义XML文件读取是常见的解决方案。就web.config而言,正如我提到的,为此提供了AppSettings部分。也可以使用 习俗 部分(尽管这是要执行的更多工作)。

祝你好运

克里斯。

匿名 said...

克里斯 -

我从上面的脚本文件中注意到,您似乎正在停用和撤消解决方案,然后读取该解决方案,而不是使用升级解决方案路线。这是Web部件示例所特有的,还是一般规则?

我问是因为我一直在为我们的Intranet使用母版页/页面布局功能,并且似乎一旦使用文件,它就不会升级。布局和CSS文件都是如此。现在,看来可以手动上传替换文件了,但是我猜这在多站点环境中并不是一个好主意。

再次感谢您的支持。

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

嗨,柯林,

我倾向于使用停用/收回/部署/重新激活序列,因为我知道它可以工作,并且我注意到这就是VSeWSS使用的过程。我认为MS很有可能已经开发了WSeWSS以这种方式工作,这是有充分的理由的。也就是说,除了在解决方案存储库中对解决方案进行版本控制外,我还非常确定upgradesolution路线实际上不会产生太大的变化。

我实际上认为您的问题可能出在其他方面。我认为您可能已经将母版页和CSS文件作为功能部件进行了部署,后来又使用SPD或浏览器进行了涉及签出/签入的更改。这将导致文件被取消托管或自定义,并且将来无法通过功能进行更新。看我的文章 使用功能部署SharePoint文件时的注意事项-幻影/虚假主机 有关此的更多信息。

HTH,

克里斯。

匿名 said...

很棒的帖子。现在有一个问题...

当我部署Webpart时,有没有办法部署几个预先配置了WebPart的示例页面?

谢谢。

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

你好

是的,这是可能的。刚刚看了我写的文章,似乎没有在任何地方讲到,所以我将在这里尝试解释。

您需要做的是:

1.使用要使用的设置获取Web部件定义,即,通过将Web部件添加到页面,进行配置,然后导出Web部件。这将为您提供.webpart文件。

2.假设您正在部署使用功能托管Web部件的页面(需要),在功能元素文件(通常称为“ elements.xml”)的“文件”元素中,添加“ AllUsersWebPart”元素。建议检查相关文档,也许还可以看看 将母版页和页面布局部署为功能 如果您不熟悉使用功能部件部署文件。

3.将.webpart文件的内容拖放到“ AllUsersWebPart”元素中。

4.使用常规方法进行部署,例如使用解决方案包

请注意,Web部件的所有部分(程序集,SafeControls条目等)都需要部署,以使所有组件都能正常工作。

HTH,

克里斯。

匿名 said...

克里斯你好
前几天,我刚刚发现了您的博客,对您有所帮助。感谢您抽出宝贵的时间来编写所有这些内容。

我有两个问题:
1.当我使用VS的内置部署项目创建一个.CAB时(作为包含我的Webpart的解决方案的一部分),它会创建一个* .OSD文件。当我使用cab sdk创建.WSP时,它没有。需要那个文件吗?在“ Windows Sharepoint Services 3.0开发人员指南”中,Bleeker将其保留在他的手中,但是我看不到它生成了。我可以部署到单服务器“场”,并且工作正常。

2.在多服务器场中,我的解决方案未部署到场中的所有Web前端。它只涉及一个:运行Centeral Administration服务的服务器。您对在哪里寻找故障排除方法有任何猜测吗?

谢谢

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

克里斯·B,

感谢您的反馈。

嗯,我对使用VS部署项目生成.cab不太熟悉。我知道这是有可能的,但似乎记得如果您想在程序包中包含本地化的资源,就会遇到问题。但是,我确实知道SharePoint并不使用.OSD,因此那里没有依赖性。

关于为什么您的解决方案不适合WFE,我想知道您是否正在部署到正确的URL?这应该是实际的内容站点URL,而不是Central Admin URL。

HTH,

克里斯。

匿名 said...

你好,我们又见面了。我们使用的是正确的网址,并且似乎在正确创建.WSP。它可以很好地工作并且可以同时部署到两个WFE,但是在大多数情况下它都无法工作。那真是太疯狂了,如果它从来没有奏效,我会一直以为我做错了什么,但是有时候确实如此。无论我尝试部署到其他多少个应用程序(选择不同的URL),还是使用中央管理屏幕将其部署到所有应用程序,它几乎总是在运行中央管理器的情况下更新WFE。它将部署到所有应用程序,但是大多数时候仅更新运行中央管理的服务器,而不更新其他服务器。

所以现在我想知道我们的服务器设置是否还有其他问题。

匿名 said...

这是一篇很棒的文章,解释得很好。对我来说,杀手er是,尽管您将解决方案包装在某个功能周围,并且可以通过回滚轻松部署和升级它,但是如果现在禁用并重新启用了升级功能,并尝试覆盖一个不存在的文件,或者尝试覆盖现有文件,在IgnoreIfAlreadyExists指令上。您能想到解决此问题的聪明方法吗?

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

这只是我刚刚意识到的事情,这要归功于 丹尼尔·麦克弗森(Daniel McPherson)的帖子 对这个。

但是,可以说我对文件的更改在功能重新激活时发生了 当相关文件未自定义(未托管)时。这是关键点,因为如果已对文件系统上的文件(即功能覆盖的文件)进行了自定义,则将不会对其进行引用-而是将使用放置在内容数据库中的版本。

此外,我还没有测试过将文件从另一功能更新为最初配置文件的功能。

假设这两个因素对您来说都是相同的(文件未自定义,请从同一功能更新),我敢肯定您的文件应该可以升级。

干杯,

克里斯。

匿名 said...

克里斯你好:

很棒的帖子。我在处理引用站点URL时遇到问题。该Web应用程序具有SSL加密,尽管我可以添加该功能,但是它不会让我部署该功能。我首先尝试解析为localhost,然后解析为主机名,最后解析为https url,但没有成功。您有什么建议可以解决此问题吗?

再次感谢,

Val D.

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

嗨,瓦尔,

您应该始终使用与浏览器中相同的地址来引用该网站。不过请记住,虽然解决方案已部署到顶级站点(http:// testsite),但是您可能具有在Web级别范围内的功能,因此这些功能可能位于不同的URL(http:// testsite / childsite)。

HTH,

克里斯。

匿名 said...

克里斯,大家好,谢谢。
非常感谢这个博客

拉梅什·苏伯拉杰

匿名 said...

克里斯,你好
我正在部署具有WSP文件的功能,该WSP文件是从ddf文件构建的,然后使用Makecab进行编译。
有谁知道是否可能,如果可以,如何将注册表项和额外的web.config密钥包含到解决方案中?
任何例子都将非常有用,
谢谢
安迪

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

嗨,安迪,

几个注意事项:

-web.config可以让您 能够 作为.wsp部署的一部分-技术是在代码中使用SPWebConfigModification类添加条目
-不支持添加注册表项,但是您可能可以以某种方式通过代码来实现,也许是在解决方案中的功能接收器中

我有一个使用这些技术的解决方案 www.codeplex.com/SPConfigStore, but note there's a minor bug somewhere which means the web.config changes aren't rolled back when the solution gets retracted (they should be). Suggest 也 checking out Vince's tool 在 http://blog.thekid.me.uk/archive/2007/03/24/web-config-modification-manager-for-sharepoint.aspx.

HTH,

克里斯。

匿名 said...

我需要完全信任dll,而无需将其部署到GAC。如何通过manifest.xml中的代码访问安全性配置修改来做到这一点。它在PolicyItem的PermissionSet中无法识别“ Unrestricted = true”
代码访问安全性部分。
请告诉我如何才能完全信任此dll。

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

你好

自完成CAS以来已经有一段时间了,所以担心我没有明确的步骤。但是,以下链接可能有用:

- http://weblogs.asp.net/jan/archive/2005/06/23/WebPartSecurity.aspx -SharePoint 2003文章,但详细介绍了所需的策略XML。您需要适应使用SharePoint 2007的解决方案框架(wsp)
- http://store.bamboosolutions.com/kb/article.aspx?id=10405
- http://daniellarson.spaces.live.com/blog/cns!D3543C5837291E93!1963.entry?sa=849563486

我将从那些开始。

HTH,

克里斯。

匿名 said...

克里斯,你好

您可以帮助我将功能包中包含的.JS和.css文件部署为一个包吗?将Webpart部署为功能对我来说很有效。我需要根据Webpart的要求添加.js和.css文件。
谢谢

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

@匿名,

当然可以。如果按照我在本文中的描述手动构建解决方案,则应将这些文件的行添加到.ddf文件中。如果您使用的是WSPBuilder(与本文相比可能是更现代的方法),并且文件位于您的12个蜂巢结构中,则应该将其拾起并打包。

HTH,

克里斯。