Подтвердить что ты не робот

Ошибка: не удалось загрузить сборку log4net

Я хочу решить эту ошибку:

Не удалось загрузить файл или сборку 'log4net, Version = 1.2.10.0, Culture = neutral, PublicKeyToken = 692fbea5521e1304' или одну из его зависимостей. Система не может найти указанный файл ". Эта ошибка находится в файле web.config.

Когда я копирую log4net.dll в каталог bin моего webapp, я получаю

Не удалось загрузить файл или сборку 'log4net, Version = 1.2.10.0, Culture = neutral, PublicKeyToken = 692fbea5521e1304' или одну из его зависимостей. Расположенное определение манифеста сборки не соответствует ссылке на сборку.

Эта ошибка также возникает в файле web.config.

Достаточно легко изменить версию и токен открытого ключа, чтобы он соответствовал файлу, чтобы сборка загружалась правильно. Когда я это делаю, мой сайт работает отлично, за исключением тех случаев, когда инициализируется объект reportViewer. Затем он выдает исходную ошибку в теге reportViewer, а не в web.config.

Моя гипотеза заключается в том, что если я установлю запрошенную версию log4net.dll, мои проблемы будут решены. Но я понятия не имею, какой файл это или где его найти. Я проверил очевидное, загрузив log4net 1.2.10 и протестировав каждую DLL в процессе загрузки.

Я должен упомянуть, что сайт работает без проблем на моей машине разработки, но не при публикации на моем сервере.

Я запускаю сайт asp.net,.NET 4.0, IIS 7, на сервере Server 2008 R2. Я установил Crystal Reports 13.0.1 для 64-битных (моя машина 64-разрядная).

Как я могу решить эту проблему?

EDIT: В ответ на ответ @Kevian я внес изменения в файл web.config. Я все еще получаю ошибку, когда определение манифеста не соответствует ссылке на сборку. Код, который вызывает эту ошибку:

Line 33:     <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server"   AutoDataBind="true"
Line 34:         BestFitPage="True" ToolPanelView="None" />
4b9b3361

Ответ 1

Здесь есть пара проблем, которые разрешимы:

  • Маркер открытого ключа для 32-битной версии конфликтов log4net.dll с той, что используется Crystal Reports. Чтобы проверить, есть ли у вас эта проблема, выполните поиск " 692fbea5521e1304" во всех ваших файлах .csproj - если вы видите ссылки на CrystalDecisions И log4net, у вас есть эта проблема.
  • 32-битная версия log4net.dll сталкивается с dll, которые скомпилированы для архитектуры 64-битного или AnyCPU. Если у вас есть эта проблема, вы найдете ссылки, которые выглядят ниже. Вы можете проверить проблему, переконфигурировав пул приложений, чтобы запустить 32-разрядную версию и проверить, работает ли приложение - если это так, у вас есть эта проблема.
<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, 

PublicKeyToken = 692fbea5521e1304, processorArchitecture = x86" >

Исправление, которое работало для нас в 64-разрядной версии, состояло в том, чтобы получить последнюю версию log4net.dll, которая фактически имеет новый PublicKeyToken, замените файл log4net.dll в вашей папке bin третьей стороны, И изменить все ссылки на log4net.dll, чтобы они выглядели следующим образом:

<Reference Include="log4net, Version=1.2.10.0, Culture=neutral,

PublicKeyToken = 1b44e1d426115821, processorArchitecture = MSIL" >

Ответ 2

Попробуйте добавить это в свой web.config. Он в основном говорит во время выполнения, что вы в порядке, загружая ту же сборку для обеих версий

  <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="log4net" publicKeyToken="692fbea5521e1304" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-1.2.10.0" newVersion="1.2.10.0"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>

Вам нужно будет заменить 1.2.10.0 на версию, имеющуюся у вас в папке bin.

Ответ 3

У меня была эта проблема в моем коде. Один из проектов, которые кто-то использовал, имел конфликт версий Log4Net. Они использовали 12.2.10, и у меня было 12.2.13. Поэтому, чтобы исправить проблему, я избавился от своей ссылки и нашел свою ссылочную dll. Я использовал это вместо этого, и он работал отлично.

Чтобы найти ссылку, Microsoft Visual Studio имеет функцию браузера. Вы можете использовать это, чтобы получить dll. Чтобы найти dll, вы можете щелкнуть по ссылкам в своем проекте и щелкнуть ссылку, которую вы хотите найти. В этом случае Log4Net. Он покажет список зависимостей, другой log4net должен быть рядом с выбранным Log4Net, и должен быть некоторый текст, показывающий местоположение текущей выбранной ссылки dll. Здесь вы найдете ссылку.

Ответ 4

MSDOS

-- Create a virtual disk
subst t: C:\Windows\assembly

-- Delete log4net x64 assembly
del t:\GAC_64\log4net\1.2.10.0__692fbea5521e1304\log4net.dll

-- remove the virtual disk
subst t: /d

Ответ 5

Для вашей проблемы я рекомендую вам удалить/удалить эту DLL в рефери и переустановить. Вот как правильно установить Log4Net на VS 2013:

1) Убедившись, что вы включили источники пакета nuget.org для утилиты NuGet Packages Manager: Rightclick Project (не решение), затем выберите "Manage NUGet Packages..." внизу слева, выберите "Настройки", затем выберите "Пакет" Manager ", затем выберите" Источники пакетов "в разделе" Доступные источники пакетов ", выберите" nuget.org ", также проверьте оба" Источники пакетов Machine-wid ", нажмите" OK "

2) Вам понадобится Управление пакетами NUGet, а затем выберите "Онлайн" на левой панели, затем выполните поиск "log4net", который портирован из apache log4j, затем установите его. Сделано, вы найдете его установленным в разделе "Ссылки" в вашем проекте

Я также добавил скриншоты.

наслаждайтесь!

введите описание изображения здесь

введите описание изображения здесь

Ответ 6

Если ваша машина 64-битная, и вы устанавливаете 32-битную версию Crystal Report, то эта ошибка будет преследовать вас, как и все остальное. В этом случае все необходимые сборки должным образом зарегистрированы в GAC, но, тем не менее, он говорит: "невозможно загрузить сборку log4net...". Причина этой ошибки заключается в том, что вы пытаетесь выполнить 32-битное приложение на 64-битной машине.

Если вы реализуете отчеты на стороне сервера, IIS не разрешит выполнение этого приложения. Для решения этой проблемы необходимо включить 32-разрядное приложение в IIS.

Шаги для этого:

  1. Перейдите в пул приложений, в котором вы запускаете приложение
  2. Щелкните правой кнопкой мыши и перейдите в Дополнительные настройки
  3. Здесь найдите "Включить 32-битные приложения" и установите для него значение true
  4. Сброс IIS (iisreset)