Проблемы со сборками ReportViewer в VS2010 - PullRequest
4 голосов
/ 24 февраля 2012

Я использую ReportViewer 10.0.0.0 из VisualStudio2010 в свое веб-приложение, и у меня возникают проблемы с его сборками.На сервере установлены ReportViewer 8.0.0.0 и 9.0.0.0, и я пытаюсь избежать установки версии 10.0.0.0.

Я думал, возможно ли использовать DLL-файлы ReportViewer10 на сервере, даже если нетимея это установлено.Я установил свойство Build Action для dll на Content, чтобы они копировались в папку выходного бина.Свойство Copy to Output Directory равно Do not copy.

. Как показывает следующая ошибка, мой проект находит две сборки из ReportViewer, одну в GAC, а другую в Temporary ASP.NET Files.В процессе поиска я обнаружил, что Temporary ASP.NET Files повторно генерируется при каждом запросе к серверу.

Пытаясь решить мою проблему, я удалил dll из Temporary ASP.NET Files, и все приложение перестало работать,показывая, что мое приложение использует dll из Temporary ASP.NET Files, а не из GAC или папки bin.Я хочу настроить свое приложение на использование dll из папки bin ИЛИ Temporary ASP.NET Files, потому что в этих местах dll находится в правильной версии (10.0.0.0).Ошибка ниже показывает конфликт между dll ReportViewer9 из GAC и dll ReportViewer10 из Temporary ASP.NET Files.

An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

CS0433: The type 'Microsoft.Reporting.WebForms.ReportViewer' exists in both
'c:\\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms\9.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.WebForms.dll' and 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\project\4ec9147f\d072b522\assembly\dl3\662a86a1\009c93d3_afeccc01\Microsoft.ReportViewer.WebForms.DLL'

Line 180:
Line 181: [System.Diagnostics.DebuggerNonUserCodeAttribute()]
Line 182: private global::Microsoft.Reporting.WebForms.ReportViewer @__BuildControlReportViewer1() {
Line 183:    global::Microsoft.Reporting.WebForms.ReportViewer @__ctrl;
Line 184: 

Source File: C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\project\4ec9147f\d072b522\App_Web_default.aspx.cdcab7d2.dmkwuxko.0.cs 
Line: 182

1 Ответ

6 голосов
/ 01 марта 2012

Моя проблема была решена с помощью следующих действий:

Я оставил на dll ссылки на мой проект, но я удалил их из папки bin. Таким образом, dll перестала быть заново сгенерированной в папке Temporary ASP.NET Files, что привело к конфликту:

 CS0433: The type 'Microsoft.Reporting.WebForms.ReportViewer' exists in both
'c:\\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms\9.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.WebForms.dll' and 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\project\4ec9147f\d072b522\assembly\dl3\662a86a1\009c93d3_afeccc01\Microsoft.ReportViewer.WebForms.DLL'

Средство просмотра отчетов продолжало работать не так, как ожидалось (GAC имел только версии 8 и 9 dll). Затем на сервере была установлена ​​программа просмотра отчетов 10.0.0.0, и на этот раз появилась новая ошибка:

    CS0433: The type 'Microsoft.Reporting.WebForms.ReportViewer' exists in both
'c:\\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms\9.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.WebForms.dll' and 'c:\\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms\10.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.WebForms.dll' 

Мне показалось странным, что этот конфликт произошел между различными версиями dll, и на этот раз было решено добавить следующий тег в файл web.config:

    <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v2.0.50727">
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.ReportViewer.WebForms" publicKeyToken="b03f5f7f11d50a3a"/>
    <bindingRedirect oldVersion="9.0.0.0" newVersion="10.0.0.0"/>
  </dependentAssembly>
</assemblyBinding>

Готово. Это работало без каких-либо конфликтов, и было возможно экспортировать отчеты.

Моя проблема была решена, но у меня все еще есть одно сомнение, и я надеюсь, что кто-нибудь поможет мне с этим:

Почему на сервере возник конфликт между двумя DLL из GAC_MSIL в разных версиях? Разве сервер не должен искать только ту версию, на которую я ссылался в своем проекте и которая указана в файле Web.config? (10.0.0.0)

Имеет ли он какое-либо отношение к файлу machine.config?

...