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();
}
}
Что-то вроде этого должно сделать это:
Assembly assembly = Assembly.LoadFrom("Reports.dll");
Stream stream = assembly.GetManifestResourceStream("Reports.MyReport.rdlc");
reportViewer.LocalReport.LoadReportDefinition(stream);
Вероятно, лучшая вещь сделать состояла бы в том, чтобы получить поток к ресурсу RDLC от другого блока, затем передать это методу "LoadReportDefinition" управления Средством просмотра Отчета.
Детали того, как получить поток от встроенного ресурса в различном блоке, могут быть найдены здесь: Ресурсы Получения с Классом
ResourceManager Кроме того, необходимо будет обратиться к встроенному использованию ресурса, это - весь путь пространства имен.
, Например, если у Вас есть приложение с пространством имен по умолчанию TheApp, и Вы сохраняете отчет названным" MyReport.rdlc" в папке названный" Отчеты ", ссылочный вызов отчета был бы be:-
rv.LocalReport.ReportEmbeddedResource = "TheApp.Reports.MyReport.rdlc";
Просто используйте полное пространство имен сборки, затем имена папок, а затем имя файла:
rv.LocalReport.ReportEmbeddedResource =
"My.Assembly.Namespace.Folder1.Folder2.MyReport.rdlc";
Затем убедитесь, что файл отчета установлен как встроенный ресурс с помощью панели свойств.