我创建了自定义程序集,其中包含一个简单的HttpModule,我想在我的Sharepojnt 2010站点中使用它。
我将我的模块添加到sharepoint网站的web.config/system.webServer/modules
部分。
然后我还将我的DLL直接复制到bin
文件夹,因为这就是asp.net应用程序的工作方式。我对AspNetHostingPermission
失败了例外。
我将相同的DLL复制到_app_bin
文件夹并且它有效。我的模块已初始化并正在运行。
然后我为我的模块类添加了两个权限:
[AspNetHostingPermission(SecurityAction.InheritanceDemand,Level = AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.LinkDemand,Level = AspNetHostingPermissionLevel.Minimal)]
并将这两个添加到汇编
[assembly: SecurityPermission(SecurityAction.RequestMinimum, Execution = true)]
[assembly: AllowPartiallyTrustedCallers]
并用我创建的密钥强烈签名我的程序集。
然后我将DLL复制回bin
但它仍然无效。将其复制到_app_bin
工作。
我需要做什么,将我的DLL直接部署到bin
文件夹?
答案 0 :(得分:1)
您遇到的问题是SharePoint正在使用代码访问安全性(CAS)使受过良好教育的管理员能够确保在向其添加功能时不会将其环境置于不必要的风险之下。
问题是,即使CAS从一开始就在.Net中,几乎没有人在SharePoint之前使用它,所以大多数开发人员都不知道如何处理它。
_app_bin中的所有内容都以完全信任的方式运行,这就解释了为什么你的dll在那里工作。
bin中的所有内容都运行时信任度要低得多,具体取决于web.config中指定的信任级别(事实上,这也是指定_app_bin具有完全信任的那个,但这在所有开箱即用信任级别中都很常见) )。
为了让你的dll从bin工作(不将信任级别改为full,这是坏的),你需要修改信任级别所指向的策略文件,并使用正确的xml来满足你的dll需要。 / p>
添加属性并没有直接帮助你,最初它们实际上只是让问题变得更糟,因为现在你的dll要求权利,即使它可能不会调用任何需要它们的东西。
如果您使用WSPBuilder构建用于部署到SharePoint的WSP包(您正在使用WSP权限),则属性可以帮助您,那么它将查找安全属性并在其中创建相应的条目manifest.xml然后让SharePoint在部署时将相应的条目添加到策略文件中。
为了使您的属性能够与WSPBuilder一起使用,我认为必须将它们更改为SecurityAction.Demand。