проблема зависимости log4net - PullRequest
13 голосов
/ 13 апреля 2010

У меня проблема с log4net, из-за которой у меня некоторое время возникали проблемы, и я решил ее отсортировать.

У меня есть библиотека классов, которая ссылается на log4net. Если я ссылаюсь на эту библиотеку классов в другом проекте, я должен ссылаться на log4net в этом проекте, в противном случае я получаю ошибку сборки

Unknown build error, 'Cannot resolve dependency to assembly 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.' 

Я знаю, что сообщение об ошибке, вероятно, подсказывает мне решение, к сожалению, я не говорю по-дурацки ...

Ура, ребята

Alex ..

Ответы [ 4 ]

10 голосов
/ 13 апреля 2010

Вот ссылка, которая описывает, что происходит и как это исправить:

http://blogs.msdn.com/jmstall/archive/2006/11/22/reflection-type-load-exception.aspx

Выдержка из вышеуказанной ссылки:

Так что случилось, что он пытался получить System.Type для бара, но для разрешить тип, необходимый для загрузки Базовый класс, который находится в другой DLL. Контекст только для отражения не делает обязательная политика, поэтому он не может найти, что длл. Подсказка LoaderException говорит используйте ReflectionOnlyAssemblyResolve, который предоставляет больше информации о это.

Чтобы использовать API отражения, вы должны разрешить все используемые зависимости.

4 голосов
/ 05 января 2013

У меня была такая же проблема с log4net при создании нового проекта WPF и добавлении ссылки на другой проект, который ссылается на log4net. Я решил проблему, добавив log4net.dll в GAC, используя следующие инструкции: http://msdn.microsoft.com/en-us/library/dkkx7f79.aspx

1 голос
/ 07 августа 2018

Я знаю, что это было давно, но я хотел поделиться тем, что решило это для меня.

Похоже, что основной причиной этой проблемы является то, что log4net требует свой конфигурационный файл в информации о сборке библиотеки классов. WPF, похоже, не нравится. Ссылка на log4net в самом приложении wpf привела к тому, что файл конфигурации log4net был перезаписан для меня, так как приложение wpf позже в порядке сборки и создает файл конфигурации log4net по умолчанию.

Чтобы исправить библиотеку классов для использования с предварительной загрузкой сборки, отредактируйте ее следующим образом:

В библиотеке классов удалите эту строку в AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]

Теперь в точке входа вашей библиотеки настройте ваш регистратор следующим образом:

FileInfo configFileInfo = new FileInfo("log4net.config");
log4net.Config.XmlConfigurator.ConfigureAndWatch(configFileInfo);

Если вы настроили log4net в файле app.config, просто укажите на него.

Я нашел это решение здесь .

1 голос
/ 02 июля 2010

У меня была такая же проблема. Я до сих пор не до конца понимаю, но могу рассказать, как я решил свою проблему. У меня был проект модульного тестирования B со ссылкой на проект A, который ссылается на log4net. Так что для меня бред означает, что когда Visual Studio пытается создать файл .accessor для проекта модульного теста, он отражает проект А. Это означает, что он пытается загрузить ссылки проекта А, но загрузчик сборки не может его найти, потому не иметь log4net в GAC, просто локально для проекта A для ссылки. В моем случае, добавление log4net к моей DEVPATH (GAC тоже будет работать) было решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...