我终于能够解决这个问题。在这种情况下,我的解决方案是使用 3.0 样式的 CAS 或级别 1 (Microsoft Docs)。我不知道这是否是最好的解决方案,但它是一个可行的解决方案。
第 1 步:
在每个 .cs 文件顶部的项目中,确保通过使用以下属性指定您要使用 1 级安全规则集:
[assembly: SecurityRules(SecurityRuleSet.Level1)]
这个属性应该在你的 using 语句之下,但在这个例子的命名空间关键字之上。
using Microsoft.SharePoint.Client;
[assembly: SecurityRules(SecurityRuleSet.Level1)]
namespace something.something{
...YOUR CODE HERE...
}
第 2 步:
了解您是在 SharePoint 集成模式还是本机模式下使用报告服务。
如果您使用的是 SharePoint 2016 集成模式,请导航到以下位置并将您的 DLL 复制到该文件夹中。
C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\WebServices\Reporting\bin
如果您使用的是本机模式,请导航到以下位置并将其复制到文件夹中。
C:\Program Files\Microsoft SQL Server
然后遍历每个编号的文件夹(IE 90,100,130 等),直到找到 Bin 文件夹。
我建议将您的自定义程序集放置在这里,而不是 GAC,因为很容易通过 Reporting Services Web 配置授予完全信任。
第 3 步:
最后从 bin 文件夹返回上一层,您可以看到报告服务的 web.config 文件。在报告服务中找到以下标签
<trust level="something" originUrl\""/>
用完全替换关卡
<trust level="Full" originUrl\""/>
注意:据我所知,这样做会使 Bin 文件夹中的所有 DLL 以完全信任方式运行
执行 IISReset 并测试我们的自定义程序集。您应该能够完全信任并避免任何可怕的 .Net 4.0 透明代码问题。
我不能保证这对所有人都有效。整个 .Net 4.6 CAS 设置非常复杂且难以理解。以下是帮助我找到此答案的 Microsoft Docs 列表。
System.Security Critical Attribute
Check for full trust in code