1

我创建了我的自定义程序集,其中包含一个简单的 HttpModule,我想在我的 Sharepojnt 2010 站点中使用它。

我将我的模块添加到了共享点站点的web.config/system.webServer/modules部分。

然后我还将我的 DLL 直接复制到bin文件夹,因为这就是 suual asp.net 应用程序的工作方式。我有一个关于 failed 的异常AspNetHostingPermission

我将相同的 DLL 复制到_app_bin文件夹并且它工作。我的模块确实已初始化并正在运行。

然后我向我的模块类添加了两个权限:

[AspNetHostingPermission(SecurityAction.InheritanceDemand,级别 = AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.LinkDemand,级别 = AspNetHostingPermissionLevel.Minimal)]

并将这两个添加到装配中

[assembly: SecurityPermission(SecurityAction.RequestMinimum, Execution = true)]
[assembly: AllowPartiallyTrustedCallers]

并用我创建的密钥对我的程序集进行了强烈签名。

然后我将DLL复制回,bin但它仍然无法正常工作。复制它来_app_bin工作。

我需要做什么才能将我的 DLL 直接部署到bin文件夹中?

4

1 回答 1

1

您遇到的问题是,SharePoint 使用代码访问安全性 (CAS) 使受过良好教育的管理员能够确保在向其添加功能时不会将其环境置于不必要的风险中。

问题是即使CAS从一开始就在.Net中,在SharePoint之前几乎没有人使用过它,所以大多数开发人员不知道如何处理它。

_app_bin 中的所有内容都在完全信任的情况下运行,这解释了为什么您的 dll 在那里工作。

根据 web.config 中指定的信任级别,bin 中的所有内容都以更少的信任运行(实际上这也是指定 _app_bin 具有完全信任的信任级别,但这在所有开箱即用的信任级别中都很常见)。

为了让您的 dll 从 bin 中工作(而不将信任级别更改为完整,这很糟糕),您需要使用正确的 xml 修改信任级别指向的策略文件,以满足您的 dll 需要。

添加属性不会直接帮助您,最初它们实际上只会使问题变得更糟,因为现在您的 dll 需要权限,即使它可能不会调用任何需要它们的东西。

如果您使用WSPBuilder构建用于部署到 SharePoint 的 WSP 包(您使用的是 WSP 权限),属性对您有帮助的地方,那么它将查找安全属性并在 manifest.xml 中创建相应的条目,然后获取 SharePoint在部署时将相应的条目添加到策略文件中。

为了让您的属性与 WSPBuilder 一起使用,我认为它们必须更改为 SecurityAction.Demand。

于 2010-08-02T06:37:08.097 回答