службы отчетов: используйте настраиваемую сборку с локальным (RDLC) отчетом

Я разрабатываю отчет, который будет использоваться в локальном режиме (файл RDLC) в приложении Winform. У меня есть настраиваемая сборка со статическим классом, в котором есть некоторые функции, которые я хочу использовать внутри отчета (в виде выражений).

Я нашел всевозможные средства для этого с отчетами RDL, но у меня проблема с разрешениями в моем отчете RDLC.

Во время выполнения я получаю следующую ошибку: «Отчет ссылается на модуль кода (мой модуль), который не является надежной сборкой».

Я знаю, что это какая-то проблема с безопасностью кода, но не знаю, что делать, чтобы это исправить. Документация, которую я видел в Интернете, нацелена на отчеты RDL и содержит инструкции по редактированию файла политики, относящегося к SQL Server. Я использую RDLC, поэтому сервер sql не задействован. Что мне нужно сделать, чтобы получить соответствующие разрешения?


person JMarsch    schedule 23.03.2010    source источник


Ответы (3)


Попробуйте использовать метод AddTrustedCodeModuleInCurrentAppDomain для ReportViewer.LocalReport Property (reportViewer. LocalReport.AddTrustedCodeModuleInCurrentAppDomain («ваша сборка»)).

Также убедитесь, что вы используете атрибут AllowParfullyTrustedCallers со своей сборкой. ([сборка: AllowPartialTrustedCallers]).

person Dean Kuga    schedule 23.03.2010
comment
Это был трюк! У меня были AllowPartialTrustedCallers, но я пропустил вызов AddTrustedCodeModuleInCurrentAppDomain. Между прочим, этот метод устарел для .Net 4.0, и для этого есть новый метод. Спасибо за помощь! - person JMarsch; 24.03.2010

Метод AddTrustedCodeModuleInCurrentAppDomain устарел для .Net 4.0. Visual Studio 2010 отключит вызов этого метода. Но есть метод AddFullTrustModuleInSandboxAppDomain в свойство LocalReport класса ReportViewer (reportViewer.LocalReport.AddFullTrustModuleInSandboxAppDomain (myAssemblyStrongName)). Требуется строгое имя сборки. Мое приложение отлично работает в Visual Studio, но я получаю сообщение об ошибке «Отчет ссылается на модуль кода (мой модуль), который не является надежной сборкой», когда я вручную запускаю exe-файл из папки «bin». Что это может быть?

person user523712    schedule 29.11.2010

Комментарий @ 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.

person Markive    schedule 14.06.2019