【问题标题】:Is it Possible to use Visual Studio/C# to develop for SharePoint 2007 without Deploying DLL to Hive是否可以使用 Visual Studio/C# 为 SharePoint 2007 开发而不将 DLL 部署到 Hive
【发布时间】:2011-08-12 03:34:00
【问题描述】:

如果客户不允许将 .dll 安装到他们的 SharePoint 2007 配置单元(或 GAC)中,是否有任何方法可以使用不需要部署 .dll 的 Visual Studio 创建 Web 部件等进入蜂巢(或 GAC)?如果没有,是否有另一种方法可以以类似的方式将 Visual Studio 和/或 C# 与 SharePoint 命名空间功能一起使用,即使不是完全采用标准方式?该客户不允许我们在盒子上安装页面以外的任何内容,如果不安装到 GAC 或 hive 中,也不允许我们安装与 SharePoint 相关的 .dll。

注意:文末有一些具体的项目细节。


接受答案的最终总结:

  • 对于部署自定义 SharePoint 程序集的替代方法(例如,非 GAC 和非 Hive)没有给出答案。
  • 但是,可以使用嵌入在页面中的 C#,您可以引用 SharePoint 程序集并在代码中使用它。 (有关详细信息,请参阅已接受的答案)
  • 许多我预期需要自定义代码的事情似乎不需要,而且在许多情况下,这样做甚至是可能/有益的。

我有一些关于它如何工作的基本想法(“神奇发生”),但是,我现在坚定地处于“不知道我不知道什么”象限,我不知道它是否可以做到,而且我不知道除了直接在 SharePoint Designer 中直接开发而完全没有 C#/Visual Studio 之外,是否有任何可能的替代路线。

想法:

  • 像往常一样使用 Visual Studio 进行开发,使用 WSPBuilder 或股票 SharePoint 项目,但不是正常部署,而是在计算机上的非配置单元位置安装 .dll,然后以某种方式包含项目作为外部资源。

  • 创建一个自托管 Web 服务,以某种方式调用该服务,提供可并入 SharePoint 网站的组件。

  • 在非 SharePoint Web 项目中开发单独的网页/Web 控件,然后以某种方式将它们包含到 SharePoint 网站中;或者,以某种方式在 IIS 目录中创建对它们的引用

  • 在 WebApplication 中开发单独的网页/Web 控件,并使用 Hostable WebCore 来提供所需的内容,当然,还可以通过某种方式将提供的页面包含到 SharePoint 中。

而且,我最后担心的是,即使我弄清楚“神奇发生”步骤的详细信息,我仍然无法得到我想要的,即能够使用 SharePoint 命名空间的功能一种有用的方法,例如连接到我们正在开发的站点,并且有足够的访问权限来做我们需要的事情,而不会从开发人员的角度(例如难以使用或维护的代码)或糟糕的用户体验(例如用户反复获取登录提示)。

(如果答案很明显,我深表歉意;我是 SharePoint 开发的新手,我只对高级 Web 开发有经验(例如,相当简单的 .ascx/.aspx,并且主要使用页面设计器),所以我必须快速掌握方位。当我使用“显而易见”的搜索词搜索帮助时,我会获得大量有关正常情况的信息,但还没有找到答案。)


根据要求,我可以提供有关特定项目的详细信息。我目前只有其中一部分的信息,这是一个长期项目,其中有很多部分将相互建立。因此,不幸的是,如果解决方案不是相当通用,我可能不得不采用 SharePoint Designer 路线,以避免依赖可能与未来出现的部分不兼容的方法相关的风险。另外,我很抱歉这些都是通用的;我试图提供所需的功能列表,而不是详细说明实际项目。

  • 拥有个人用户网站主页的能力,允许他们查看有关他们拥有的项目和他们参与的项目的各种信息
  • 能够拥有存储用户要遵循的向导类型步骤的站点模板
  • 能够将向导模板链接到各种文档以及可能与各个步骤相关的其他内容
  • 能够使用模板中的项目存储各种相关角色和属性(例如允许完成任务的时间)
  • 用户能够使用向导创建站点项目的实例并允许或强制基于模板属性分配其他用户
  • 与项目关联的某些角色能够编辑文档并将其保存回来,并限制其他人编辑它们
  • 项目创建者以外的用户(可能基于用户分配的项目角色)查看所有信息(时间表等)和编辑项目中的所有文档的能力
  • 具有分配角色的关联用户在完成其部分任务时标记的能力
  • 能够根据项目中不同项目的属性信息计算时间线
  • 能够通知用户(通过电子邮件和网站主页通知)必须采取行动或被标记为需要接收一个或多个项目项的更新的角色
  • 一旦完成一个步骤,就可以锁定项目项的修改;并可能解锁和/或收回步骤
  • 能够自动创建报告并将它们发送到适当的位置(可能是电子邮件,也可能是站点上的管理页面,或完全发送到另一个站点。)
  • 能够标记已完成的项目并将其存档在一个单独的部分,只有某些 Windows 组或现场定义的组才能查看

我也知道,一旦我们完成第一部分以使客户满意,我们打算大大增加该项目的范围。我正在尝试查找更多信息,如果/何时可用,我会在此处发布。

我意识到其中的某些功能可能与 SharePoint 没有任何关系,其中某些功能可能无法提供足够的信息来告诉您它需要哪些功能或其他功能。我很乐意澄清任何没有意义的事情,但我想尝试提供一些细节,因为其他人可能比我更了解哪些 SharePoint 部分是必要或可能使用的。

【问题讨论】:

  • 我假设如果客户端不允许部署配置单元,他们也会拒绝 GAC,但如果他们允许,这是一种选择。
  • 您的假设是正确的。我们发现我们不允许通过向他们提供示例项目来尝试将 .dll 安装到配置单元,但即使在我们创建示例之前,我们就被告知不要使用 GAC。感谢您提及它,我将其添加到问题中。

标签: c# sharepoint sharepoint-2007 moss


【解决方案1】:

如果你能做到这一点,你应该看看是否有可能从 sharepoint 2007 升级到 2010,因为你描述的许多问题在 2010 年变得更容易解决。

真正能帮助我找到更全面答案的方法是对您尝试实现的功能进行非常简短的描述。


好的,感谢您的更新。 我会尽力解决项目的所有要点。

  • 使用Mysite 可以轻松获得您的第一点。
  • 对于您正在讨论可以存储文档和相关数据的向导模板的所有要点,您可能需要查看Microsoft Infopath,但不能保证它会完美匹配,但请查看并决定。
  • 关于 infopath 的重要部分在于,当您将其与 Sharepoint Workflows 结合使用时,您可以设置处理规则和不同的视图,这将允许您分配与文档编辑权限等相关的角色。
  • 同样,由于 infopath 能够轻松提交到共享点列表或文档库,因此任何基于数据的计算都非常简单,只需选择您想要的数据以及您想用它做什么。
  • 对于通知,microsoft sharepoint Designer 中的 sharepoint 工作流允许轻松创建电子邮件。
  • 就您的最后一个要点而言,这是另一个工作流程,使网站仅对某些组可见的能力是 sharepoint 的一项基本功能。

这些都在 SP 2007 中可用,但老实说,就项目的难度和长度而言,使用 SP 2010 会在财务上更加负责。而且,过渡过程很顺利,您不会真正失去任何东西,只是收获。不过从你所说的来看,这可能是不可能的,这很遗憾,但无论如何都祝你好运!


这部分应该可以帮助您了解 C# 页面,这是一个基本的 hello world 页面。

<%@ Page Language="C#" %>
<script runat="server">
  public void Page_Load(object sender, EventArgs e){
    Response.Write("<h1>Hello World!</h1>");
  }
</script>

我通常在共享点设计器中对此进行编码。另外,假设你需要使用服务器上提供的Microsoft.SharePoint.dll,你可以添加这一行:&lt;%@ Import Namespace="Microsoft.Sharepoint" %&gt;,因为它是服务器上的一个页面,你不需要以任何方式专门链接它,就在页面语言声明之后的那一行。希望这可以解决所有问题!

【讨论】:

  • 至于迁移到 SharePoint 2010,当我第一次参与该项目时,我做了一些版本之间的比较并提出了这个问题。不幸的是,答案甚至不是“不”,更像是“没有机会”。 :) 至于我需要实现的功能的描述:问题是它是一个长期项目,我对其中一个部分的信息量非常少。所以,如果它不是一个相当通用的解决方案,我可能会避免它作为基本的风险规避。
  • 也就是说,如果你能给我一些提示,告诉我你认为可以为哪些类别的事情做这件事,我可能会和 PM 谈谈,并在某种程度上缩小事情的范围范围是。我会尝试更好地为您描述,但是,我对 SharePoint 还不够陌生,除了告诉您整个项目之外,我对什么是好的细分非常模糊,而且我知道我不能随意要做到这一点。 :) 哎呀,他们甚至不让我们安装 .dll。 :D
  • 我发了一封电子邮件,询问他们是否可以给我更多关于项目后期阶段的信息;如果我能找到一个总结的好方法,我会告诉你的。我还将编辑该问题,以至少提供有关我现在所知道的部分的一般信息,希望它对提供一些范围有所帮助。哦,谢谢你的回答!对不起,我的回答太专注了,没有早点说。 :)
  • 哇,太好了,谢谢。我现在正在调查这一切。同样,关于 2010 与 2007 我完全同意,事实上,我认为不允许使用所有开发工具有相同的观点。但是,我很清楚,最终客户在这两个问题上都不会灵活处理。 (虽然奇怪的是,已经提到了在项目完成后 将进一步工作迁移到 2010 年的可能性。sigh
  • 我确实注意到,在我们的限制下,使用 Visual Studio 开发工具似乎没有解决您的任何问题。 (例如,没有将 .dll 部署到 GAC 或 hive。)您认为这是不可能的,还是不值得的,或者其他什么?假设我们完全没有这些限制,那么使用 Visual Studio/C# 开发能力有显着优势吗?我一直认为开发工具会稍微简化一些事情,所以也许我问错了问题。
【解决方案2】:

一种选择是将代码部署到 BIN 目录而不是 GAC。

BIN directory runs with minimal trust。但是,有些东西不能在这里部署(比如事件接收器)。

另请参阅,How to deploy a SharePoint web part to bin

【讨论】:

  • 太棒了,谢谢,我们今天在工作中与一位顾问交谈,他建议这是一种可能性,但听起来很难正确处理所有配置。我们正在等待有关设置它所需的更多信息以及它是否真的会最终拥有我们需要的东西,因为它是部分信任。 :) 非常感谢您的回答!
【解决方案3】:

We 有一个使用 IronPython 脚本的解决方案。有一个 IronPython Web 控制台、通用 IronPython 事件接收器、页面、工作流、timerjob、也可以通过 Web 界面编辑的脚本库,以及一个包含必要配置的列表。我希望在某个时候开源它的核心,但完整版可以做的更多。

关键是我们不需要为每个特定客户需要添加或更改的每一件小事重新部署。特别是对于工作流程 - 我们可以做一些小的改动,而不会破坏当前正在运行的所有内容。

【讨论】:

  • 目标机器上需要安装什么?
  • 这是一个 .wsp 解决方案 - 所以它确实需要部署到 GAC,并且它不能在沙盒中运行。但是,它允许您开发相当多的东西,甚至不需要 Visual Studio 或部署其他任何东西。当我查看需求时,后半部分的大部分时间应该很容易实现。
  • 但我认为.wsp 至少有一个用于 IronPython 的 .dll?如更新的问题所述,不允许将任何 .dll 安装到他们的 GAC。不过,感谢您尝试帮助我弄清楚这一点。 :)
猜你喜欢
  • 1970-01-01
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
相关资源
最近更新 更多