簡體   English   中英

報告服務:使用帶有本地(RDLC)報告的自定義程序集

[英]reporting services: use a custom assembly with a local (RDLC) report

我正在設計一個將在Winform應用程序中以本地模式(RDLC文件)使用的報告。 我有一個帶有靜態類的自定義程序集,它具有一些我想在報表中使用的函數(作為表達式)。

我已經找到了使用RDL報告執行此操作的各種幫助,但是我的RDLC報告遇到了權限問題。

我在運行時收到以下錯誤:“報告引用代碼模塊(我的模塊),它不是可信組件”。

我知道這是某種代碼安全問題,但我不知道該怎么做才能修復它。 我在網上看到的文檔是針對RDL報告的,它指示我編輯特定於SQL Server的策略文件。 我正在使用RDLC,所以沒有涉及sql server。 我需要做什么才能獲得適當的權限?

嘗試使用ReportViewer.LocalReport屬性AddTrustedCodeModuleInCurrentAppDomain方法(reportViewer.LocalReport.AddTrustedCodeModuleInCurrentAppDomain(“您的程序集”))。

還要確保在程序集中使用AllowPartiallyTrustedCallers屬性([assembly:AllowPartiallyTrustedCallers])。

對於.Net 4.0,AddTrustedCodeModuleInCurrentAppDomain方法已過時。 Visual Studio 2010禁用此方法的調用。 但是ReportViewer類的LocalReport屬性中有AddFullTrustModuleInSandboxAppDomain方法(reportViewer.LocalReport.AddFullTrustModuleInSandboxAppDomain(myAssemblyStrongName))。 它需要強大的程序集名稱。 我的應用程序從Visual Studio執行得很好,但是當我從文件夾“bin”手動運行exe文件時,我收到錯誤“報告引用代碼模塊(我的模塊),這不是可信組件”。 它可以是什么?

@StefanHa的評論提供了答案,如果博客文章消失在這里,那么代碼對我有用:

using System.Reflection;
using System.Security;
using System.Security.Permissions;
using System.Security.Policy;
PermissionSet permissions = new PermissionSet(PermissionState.None);
permissions.AddPermission(new FileIOPermission(PermissionState.Unrestricted));
permissions.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
rv.LocalReport.SetBasePermissionsForSandboxAppDomain(permissions);
Assembly asm = Assembly.Load("MyLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
AssemblyName asm_name = asm.GetName();
rv.LocalReport.AddFullTrustModuleInSandboxAppDomain(new StrongName(new StrongNamePublicKeyBlob(asm_name.GetPublicKeyToken()), asm_name.Name, asm_name.Version));

我還需要設置PermissionState.Unrestricted而不是PermissionState.None。 在我的示例中,我正在加載System.Web + System.Drawing,因此我只需要SetBasePermissionsForSandboxAppDomain

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM