2009年10月7日,星期三

我最喜欢的SharePoint 2007开发技术(着眼于SP2010)

在介绍SharePoint 2010发行版时,我想写下一些关于SharePoint 2007开发后代的想法,主要是出于我的利益。这样做的原因之一是因为我’我最近一直在使用SP2010 / VS2010技术预览版’ve 不 done a full “compare and contrast”练习中,我当然可以看到,将来我会想参考一下我喜欢在SharePoint 2007世界中处理某些事情的原因,更重要的是为什么。我的经验是,过渡到新平台会带来某种失忆,出于某种原因’很难记住上一版本中的等效工作原理(CMS2002,任何人?)–毫无疑问,我们需要避免以不相关的实践和约束来限制我们的思维,但是有时,旧方法无疑可以作为参考。

这不是’t综合清单- 我下面的许多观点来自“开发者日落复习”我最后一个项目的(特别感谢前队友 贾普·沃瑟斯(Jaap Vossers) 对于我们关于此内容的一些想法/讨论)。之所以存在某些技术是因为我们使用了它们并且效果很好,而其他技术则因为我们没有’我以为我们没有了他们。其他几个只是“things I’仍未实施,但认为将是最佳选择” –其中一些在SP2010下仍然可能适用。我相信很多都是已经建立的“baseline approach”许多团队实施SharePoint 2007– it’也许要说出来“best practice” for some, so I won’t. Even so, I’m *确定*,所以人们会有不同的看法/技术,这些是我想捕捉的–如果您有更好的想法,请务必发表评论或指向其他事项:


Visual Studio解决方案/项目结构

  • 每个部署到12文件夹的VS项目都包含12文件夹结构 
  • 使用“class library”从干净的基础开始的项目模板– 编辑.csproj文件以添加以下菜单选项‘Add user control’ 
  • WSPBuilder 作为首选的WSP生成工具
  • 一个主要‘consolidation’用于生成单个.wsp的项目(如果适用)–通常这是我的[公司]。[客户] .Project。 网页 项目
  • Use post-build command on 每 项目 to XCOPY 12 hive files into the 合并 项目 , so that avoid having one .wsp for VS项目–首选.wsps较少,以减少版本控制/依赖性问题
  • 用户控件–对于发布网站,请考虑在用户控件而非页面布局中实现HTML标记(如我在 WCM的5大技巧 帖子和Waldek在 在SharePoint开发中利用ASP.NET用户控件)
  • 用户控件(如果未使用上述技术)-要获得设计图面,请考虑使用单独的Web项目进行用户控件的初始开发,然后使用构建后事件将.ascx复制到主项目中,或者使用‘Add as link’技术。 (据我所知,这是为用户控件提供功能设计界面的唯一方法吗?)
    • 请记住,许多.ascx工件不能存在于CONTROLTEMPLATES的子文件夹中(例如,自定义字段控件),它们 必须 成为SharePoint加载它们的根源
  • 使用Visual Studio生成后事件来重新GAC程序集并复制12个文件夹-这样 默认 编译动作是“quick deploy”选项。这种情况在开发人员中经常发生,以至于我’d rather have any 其他 我需要一个明确的操作,因为我们很少要编译但不加载新程序集
  • 考虑创建自定义VS构建类型,例如“DebugNoDeploy”, “ReleaseNoDeploy”
    • 此外,创建一个构建类型以在开发人员中重新配置您的网站(如果此步骤在实现的开发中经常发生)
  • 在适当的地方利用自定义VS工具选项(例如“Tools > MyScript.bat”)
  • 重新bin比重新GAC快得多(对于可以在GAC外部测试的代码)–自定义工具脚本或自定义构建类型。这对于开发的高度迭代部分很有用。

的SharePoint 编码花絮

我想坚持的一些随机想法,因为我认为它们’这可能与2010年的世界相关:

  • 应始终通过以下方式将开发人员中应用程序池重置的影响最小化 禁用证书吊销列表检查 –我注意到这样做的好处
  • 将数据存储在SPWeb属性包中之前,请仔细考虑– data stored here 是 可访问的查询!
  • 将常量用于SharePoint名称,尤其是字段名称
    • 这对于确保项目团队之间的一致性以及通过Visual Studio重构提供名称更改至关重要
    • 总而言之,最好有单独的DisplayName&InternalName常数
  • 存储配置值-我的 配置存储 解决方案对此非常有效
  • 记录中–我首选的日志记录框架是出色的 log4net
    • If you have a requirement to log to a 的SharePoint list, creation of a custom log4net appender 是 the way to go. 我没有’尚未做到这一点,而且奇怪的是,似乎没有其他人(公开)。虽然会相当琐碎
    • 资深MVP 戴夫·曼 向我指出,log4net在SharePoint工作流中使用时会引起问题,因为工作流休眠时无法对记录器类进行序列化。通过不将记录器存储为私有变量,而是实例化每次使用的时间,可能可以减轻这种情况(log4net可能返回相同的对象,但是性能无论如何在工作流程中都不是至关重要的)
  • 在开发人员中管理web.config修改(当您不这样做时’t have time to SPWebConfigModification 然而):
    • 我不’这里没有一个好故事– the best I’我想出的是‘reference’web.config存储在源代码管理中,可用于在开发人员之间同步更改。附带说明一下,如果项目的第一个编码周放下SPWebConfigModification Feature Receivers的管道代码,则可以避免此问题。“mandatory setup task”, so that it’新的web.config更改时的最小摩擦 需要–否则我认为’跳过此步骤并进入“technical debt”直到团队能够赶上此类事情的时候。我们都知道那里会发生什么。

因此,无论您是立即开始查看SharePoint 2010还是您的日常工作又要集中在2007年,我希望此列表对您有所帮助。我个人而言,我知道这样做是为了 改善 (持续改进),回头看看有什么启发 ’仍然相关,什么不相关’t。展望未来,像其他许多MVP一样,此博客现在将更加着重于SP2010– I’根据我在接下来的几周内(取消NDA之后)使用VS2o1o 的SharePoint 工具的经验,我很可能会重新审视其中的一些内容。敬请关注!

10条评论:

纳德格·德鲁森(NadègeDEROUSSEN) 说过...

你好,

您的帖子非常有趣。
I'd有一个问题。是否有特殊原因不使用VSeWSS来打包和部署您的解决方案/功能?您是否遇到了一些与VSeWSS有关的问题,这些问题决定您不使用它,而是改用WSPBuilder?

感谢您的帖子和您的回复。

埃纳尔·奥托·斯坦格维克 说过...

您应该添加回收应用程序池,而不是拉动iisreset蛮力地使用,还可以显着缩短重新部署时间:)

Recycling 是 simple, using WSPBuilder 's Visual Studio addin; Harbar's tray util (http://www.harbar.net/articles/APM.aspx); or a console app of mine (http://dl.getdropbox.com/u/1878671/iisrecycle.zip (includes source)).

穆欣比 说过...

克里斯好东西。昨天我与Jaap聊天,他提到了您的帖子。我看到相当多的人链接到我们的CRL文章,因此感谢您的'Link love'

Your list, to some degree, matches what 是 in our 的SharePoint development Guidelines (Free download 在 http://www.muhimbi.com/blog/2009/05/muhimbis-sharepoint-development.html). I hope we don't need to overhaul too much of this when SP2010is out.

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

@Nadège,

我个人更喜欢'one-to-one'映射到具有WSPBuilder和'12'我的VS项目中的结构给出了。在早期版本(低于1.3 CTP)中,VSeWSS在某些情况下缺乏灵活性,从而导致了批评,它过于复杂。'black box'。我认为其中一些已得到纠正,并且确实可以做得很好-但是我更喜欢WSPBuilder的另一个原因是,它似乎是最受欢迎的SharePoint开发工具-请参阅Todd'的不科学调查 http://sharepoint.mindsharpblogs.com/Todd/Lists/Tool/summary.aspx。我喜欢项目之间,项目团队之间的一致性,因此WSPBuilder中的普遍性无疑是's favour.

谢谢,

克里斯。

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

@Einar,

好点-我可能已经省略了它,因为它's just 这样 这是一件基本的事情,但是直到前一天,我遇到了一个每次都在进行IISReset的开发人员。

I'我也长期使用Spence'的实用程序和WSPBuilder来完成这项工作。

谢谢,

克里斯。

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

@Muhimbi,

是的,CRL技巧值得广泛联系:)

我没有'之前没有人公开发布过SharePoint开发指南,值得称赞。在我工作了很长时间的地方,我们不再编写自己的指南(至少适用于.Net),而是转而使用IDesign指南,但保留了所有SharePoint的详细信息。'我回去想了'最好有一个单一的位置来指向开发人员。 SPDevWiki做得很好,但显然不能'包含与您的组织有关的任何政策。

I'll take a read!

谢谢,

克里斯。

穆欣比 说过...

顶部,它已经存在了一段时间,并且某些部分需要更新。

无论如何,如果您有任何具体评论,请将其留在相关帖子中的评论中,或给我留言。

感谢您向我介绍IDesign,他们有一个与我目前非常相关的WCF命名标准文档。

匿名 said...

"If you have a requirement to log to a 的SharePoint list, creation of a custom log4net appender 是 the way to go. 我没有’尚未做到这一点,而且奇怪的是,似乎没有其他人(公开)。"

克里斯,我'我做了这个。实际上,这很简单。我的附加程序将写入SharePoint跟踪日志。

If people are interested, contact me: info@sharepoint-tools.de or http://www.sharepoint-tools.de

干杯
奥利弗

比尔·西姆瑟(Bil Simser) 说过...

@Chris:我完全采用WSPBuilder方式(同时使用命令行但特别是VS插件来启动项目)。它打包的东西很棒,在最新版本中,您可以将自己的.config文件放在根目录中并控制输出,等等。我使用命令行版本进行更复杂的构建,其中我有3或4 wsps's NANt和wspbuilder.exe。 VSeWSS太恕我直言了。我可能会尝试在2010年像我一样给它一个机会'我看过看起来更好,但是'仍然落后于WSPBuilder(尽管它确实具有一些关键功能,例如对WSP / STP /站点进行反向工程)。

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

@比尔

是的,VS2010中的工具肯定更好(请注意'虽然没有标记为VSeWSS'完全不同的模型/代码库)。有趣的是,看到大型2010开发人员如何发挥作用。关于从命令行运行的有趣点-我 认为 这可以通过从命令行运行dev.exe(VS2010)并传递一些开关来实现。

干杯,

克里斯。