Отобразите отчет о.RDLC, встроенный в файл DLL

Erasure, буквально означает, что информация о типе, которая присутствует в исходном коде, удаляется из скомпилированного байт-кода. Давайте поймем это с помощью некоторого кода.

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class GenericsErasure {
    public static void main(String args[]) {
        List<String> list = new ArrayList<String>();
        list.add("Hello");
        Iterator<String> iter = list.iterator();
        while(iter.hasNext()) {
            String s = iter.next();
            System.out.println(s);
        }
    }
}

Если вы скомпилируете этот код и затем декомпилируете его с помощью декомпилятора Java, вы получите что-то вроде этого. Обратите внимание, что декомпилированный код не содержит следов информации о типе, присутствующей в исходном исходном коде.

import java.io.PrintStream;
import java.util.*;

public class GenericsErasure
{

    public GenericsErasure()
    {
    }

    public static void main(String args[])
    {
        List list = new ArrayList();
        list.add("Hello");
        String s;
        for(Iterator iter = list.iterator(); iter.hasNext(); System.out.println(s))
            s = (String)iter.next();

    }
} 
38
задан JeffV 19 November 2008 в 05:23
поделиться

3 ответа

Что-то вроде этого должно сделать это:

Assembly assembly = Assembly.LoadFrom("Reports.dll");
Stream stream = assembly.GetManifestResourceStream("Reports.MyReport.rdlc");
reportViewer.LocalReport.LoadReportDefinition(stream);
54
ответ дан Greg Sansom 23 September 2019 в 19:06
поделиться

Вероятно, лучшая вещь сделать состояла бы в том, чтобы получить поток к ресурсу RDLC от другого блока, затем передать это методу "LoadReportDefinition" управления Средством просмотра Отчета.

Детали того, как получить поток от встроенного ресурса в различном блоке, могут быть найдены здесь: Ресурсы Получения с Классом

ResourceManager Кроме того, необходимо будет обратиться к встроенному использованию ресурса, это - весь путь пространства имен.

, Например, если у Вас есть приложение с пространством имен по умолчанию TheApp, и Вы сохраняете отчет названным" MyReport.rdlc" в папке названный" Отчеты ", ссылочный вызов отчета был бы be:-

rv.LocalReport.ReportEmbeddedResource = "TheApp.Reports.MyReport.rdlc";
11
ответ дан DrCamel 23 September 2019 в 19:06
поделиться

Просто используйте полное пространство имен сборки, затем имена папок, а затем имя файла:

rv.LocalReport.ReportEmbeddedResource = 
    "My.Assembly.Namespace.Folder1.Folder2.MyReport.rdlc";

Затем убедитесь, что файл отчета установлен как встроенный ресурс с помощью панели свойств.

23
ответ дан 27 November 2019 в 02:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: