Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法将自定义DLL部署到Sharepoint网站_Sharepoint_Code Access Security - Fatal编程技术网

无法将自定义DLL部署到Sharepoint网站

无法将自定义DLL部署到Sharepoint网站,sharepoint,code-access-security,Sharepoint,Code Access Security,我创建了一个自定义程序集,其中包含一个简单的HttpModule,我想在Sharepojnt 2010站点中使用它 我将我的模块添加到sharepoint网站的web.config/system.webServer/modules部分 然后,我还将我的DLL直接复制到bin文件夹,因为这就是SualASP.net应用程序的工作方式。我得到了一个关于失败的AspNetHostingPermission的异常 我将同一个DLL复制到\u app\u bin文件夹中,它成功了。我的模块已初始化并正在运

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

我将我的模块添加到sharepoint网站的
web.config/system.webServer/modules
部分

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

我将同一个DLL复制到
\u app\u bin
文件夹中,它成功了。我的模块已初始化并正在运行

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

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

并将这两个组件添加到组件中

[assembly: SecurityPermission(SecurityAction.RequestMinimum, Execution = true)]
[assembly: AllowPartiallyTrustedCallers]
并使用我创建的密钥对我的程序集进行了强签名

然后我将DLL复制回
bin
,但它仍然不起作用。将其复制到
\u app\u bin
工作正常


我必须做什么,将我的DLL直接部署到
bin
文件夹?

您遇到的问题是,SharePoint正在使用代码访问安全性(CAS),使受过良好教育的管理员能够确保他们在向环境添加功能时不会给环境带来不确定的风险

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

app-bin中的所有内容都以完全信任的方式运行,这就解释了为什么你的dll在那里工作

根据web.config中指定的信任级别,bin中的所有内容运行时的信任度都要低很多(事实上,这也是指定_app_bin具有完全信任,但这在所有开箱即用的信任级别中都很常见)

为了使您的dll从bin开始工作(而不将信任级别更改为full,这是错误的),您需要使用正确的xml修改信任级别指向的策略文件,以满足您的dll需要

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

如果您使用这些属性来构建部署到SharePoint的WSP包(您使用的是WSP权限),那么它将查找安全属性并在manifest.xml中创建相应的条目,然后SharePoint将在部署时将相应的条目添加到策略文件中


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

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

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

app-bin中的所有内容都以完全信任的方式运行,这就解释了为什么你的dll在那里工作

根据web.config中指定的信任级别,bin中的所有内容运行时的信任度都要低很多(事实上,这也是指定_app_bin具有完全信任,但这在所有开箱即用的信任级别中都很常见)

为了使您的dll从bin开始工作(而不将信任级别更改为full,这是错误的),您需要使用正确的xml修改信任级别指向的策略文件,以满足您的dll需要

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

如果您使用这些属性来构建部署到SharePoint的WSP包(您使用的是WSP权限),那么它将查找安全属性并在manifest.xml中创建相应的条目,然后SharePoint将在部署时将相应的条目添加到策略文件中


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

如果它在_app_bin文件夹中工作,为什么不将其保留在那里?因为如果它只是运行,它可能不那么“可信”?“我想知道为什么?”蒂姆·拉森:我的意思是:如果它只是运行,可能不会被信任检查,也可能实际上不安全。我宁愿用Sharepoint检查它并信任它的执行的方式来开发它。它在_app_bin文件夹中工作,为什么不把它放在那里呢?因为如果它只是运行,它可能不那么“受信任”?“我想知道为什么?”蒂姆·拉森:我的意思是:如果它只是运行,可能不会被信任检查,也可能实际上不安全。我宁愿以Sharepoint检查并信任其执行的方式来开发它。谢谢。这是一个非常好的答案,并提示如何正确使用CAS。我几年前就已经与CAS合作过(必须从Sharepoint访问自定义SQL DB,并且必须更改信任文件以授予SQL权限)。我只是不知道如何解决这个问题。检查更改是非常好的一点。谢谢。这是一个非常好的答案,并提示如何正确使用CAS。我几年前就已经与CAS合作过(必须从Sharepoint访问自定义SQL DB,并且必须更改信任文件以授予SQL权限)。我只是不知道如何解决这个问题。检查更改是一个很好的观点。