#c# #.net #reporting-services #.net-assembly
#c# #.net #службы отчетов #.net-сборка
Вопрос:
У нас есть проект создания отчетов, использующий клиентскую версию SSRS, файлы RDLC. Для этого мы используем Nuget-пакет «Microsoft.ReportViewer.Windows» с единственной доступной версией. Версия файла — «11.0.3452.0». Все работает нормально, но на ОДНОМ сервере, когда мы устанавливаем «Microsoft Report Viewer 2012 Runtime CTP» в GAC, версия файла «11.0.1443.3», используются эти сборки, а вложенные отчеты отображают сообщение
Ошибка: не удалось отобразить вложенный отчет.
Из того, что я понял, ожидаемое поведение заключается в том, что сборки gac с одной и той же основной версией приоритетнее локальных.
Теперь интересная часть: я вставил несколько отладок, чтобы распечатать все загруженные сборки:
protected void BtnAssemblies_Click(object sender, EventArgs e)
{
var sb = new StringBuilder();
sb.Append("<br />");
var sbExceptions = new StringBuilder();
sbExceptions.Append("<br />");
var t = new LocalReport();
var reportViewerAssemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();
for(int i = 0; i < reportViewerAssemblies.Count();i )
{
var ass = reportViewerAssemblies[i];
try
{
sb.Append(ass.FullName);
sb.Append(": ");
sb.Append(ass.CodeBase);
sb.Append("<br />");
}
catch(Exception ex)
{
sbExceptions.Append(ass.FullName);
sbExceptions.Append("<br />");
}
}
var str = sb.ToString();
str = "<br />";
str = "<br />";
str = sbExceptions.ToString();
LblAssemblies.Text = str;
}
И за исключением 4 ожидаемых сборок:
- Microsoft.ReportViewer.Common.DLL
- Microsoft.ReportViewer.DataVisualization.DLL
- Microsoft.ReportViewer.ProcessingObjectModel.DLL
- Microsoft.ReportViewer.WinForms.DLL
Загруженные сборки точно такие же. Поскольку я понятия не имею, как это может произойти, я попытался «исправить» проблему, перезаписав привязку, поскольку я все равно хотел бы использовать локальные сборки. Поскольку невозможно перенаправить ту же версию, я попробовал файловую версию:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.ReportViewer.Common.dll" publicKeyToken="89845dcd8080cc91" culture="neutral" />
<bindingRedirect oldVersion="11.0.1443.3" newVersion="11.0.3452.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Что также не работает.
Итак, мои вопросы:
- Как возможно, что установка другой второстепенной версии в GAC приводит к сбою ОДНОГО сервера?
- Есть ли какой-нибудь способ узнать больше о загруженных сборках? К сожалению, мы не получаем ошибку напрямую, просто бессмысленное сообщение
- В качестве обходного пути есть ли какая-либо возможность либо отменить GAC, либо перенаправить файл-versiob