2013-09-09 2 views
0

Для проекта моей команды недавно началась, я получаю следующее исключение при попытке запустить мои вновь созданный модульные тесты SpecFlow:Доступ запрещен на Iesi.Collections.dll

Could not load file or assembly 'Iesi.Collections, Version=1.0.1.0, Culture=neutral, 
PublicKeyToken=aa95f207798dfdb4' or one of its dependencies. Access is denied. 

Iesi.Collections, Version=1.0.1.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4 

.. .а C# фрагмент, который он отказы выглядит следующим образом:

private static ISessionFactory _sessionFactory; 

// ... Further down in the class ... 
public static void GenerateSchema() 
{ 
    _sessionFactory = Fluently.Configure(new Configuration().Configure()) 
         .Mappings(m => m.FluentMappings.AddFromAssembly(typeof(DataContext).Assembly)) 
         .ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(false, true)) 
         .BuildConfiguration() 
         .BuildSessionFactory(); 
} 

... и журнал слияние выглядит следующим образом:

=== Pre-bind state information === 
LOG: User = Unknown 
LOG: DisplayName = Iesi.Collections, Version=1.0.1.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4 
(Fully-specified) 
LOG: Appbase = file:///C:/Projects/SomeProject/SomeProject.FeatureTest/bin/Debug 
LOG: Initial PrivatePath = NULL 
Calling assembly : NHibernate, Version=3.3.1.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4. 
=== 
LOG: This bind starts in default load context. 
LOG: Using application configuration file: C:\Projects\SomeProject\FeatureTest\bin\Debug\SomeProject.FeatureTest.dll.config 
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config. 
LOG: Post-policy reference: Iesi.Collections, Version=1.0.1.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4 
LOG: Attempting download of new URL file:///C:/Projects/SomeProject/SomeProject.Web/bin/Debug/Iesi.Collections.DLL. 
ERR: Failed to complete setup of assembly (hr = 0x80070005). Probing terminated. 

я (и моя команда) в тупик на этом, потому что мы попытались следующие вещи:

  1. Проверьте права доступа папки на packages директории, где DLL живет
  2. Убедитесь, что Iesi.Collections DLL копируется в bin \ Debug on build
  3. Проверьте, чтобы настройки NHibernate были нормальными (они соответствуют тем из проекта, который работает для меня)
  4. Повторно приобретен проект из TFS; так как я единственный человек, с которым это происходит, я подумал, что это может быть случай с поврежденным Get. Это не имело никакого эффекта. (Повторите покупку, я имею в виду, что я закрыл VS2012, удалил существующую папку, открыл новый экземпляр VS2012, Get> Advanced> Get Specific Version, с отмеченными отмеченными галочками.)
  5. Вручную повторное ассоциирование DLL из каталога packages к проекту C#. Нет эффекта.
  6. Поскольку DLL имеет токен открытого ключа, я знаю, что DLL подписана - так что это тоже не так.
  7. Вышеприведенный код может быть исключен, поскольку эта точная строка была использована в двух других проектах для настройки локальных схем БД для целей модульного тестирования.
  8. Проверено, что DLL не заблокирована Windows, просмотрев Свойства; он не заблокирован.
  9. В журнале слияния я заметил, что он пытается загрузить DLL из веб-проекта, поэтому я добавил Iesi.Collections.dll в веб-проект; нет эффекта.
  10. Несмотря на то, что версия SpecFlow была 1.9.2, я заметил, что Castle.Core, NHibernate.ByteCode.Castle и log4net отсутствуют, поэтому я добавил их в проект, который выполняет доступ к данным (C: \ Projects \ SomeProject \ SomeProject.Core); нет эффекта. (Добавлено потому, что они находятся в другом проекте, который I может запустить тесты функций, а это означает, что это именно это решение.)
  11. Из-за некоторых других условий для других проектов я запускал VS2012 по умолчанию в качестве администратора; теперь, когда я в отчаянии, я попробовал отключить это и работать как я сам, ни к чему.
  12. Некоторые дополнительные исследования StackOverflow показали, что другой пользователь покорил подобную проблему, очистив их временные файлы Интернета, поэтому я загрузил CCleaner - никакого эффекта.
  13. Подробнее Исследование StackOverflow показало рассказ о парне, который мог решить свои проблемы с помощью скромного iisreset из командной строки; Я пробовал это, ни к чему.

Вопрос: Что вызывает Iesi.Collections.dll бросить Access Denied FileLoadException на инициализации NHibernate?

+2

Вы пробовали 1 и 2 для всех зависимостей dll (при условии, что они есть)? – Cemafor

+0

Я не знаю, какие именно зависимости у него есть; Я также разблокировал разрешения на папку bin для проекта, чтобы попытаться получить это за столом. (Конечно, нет эффекта.) Я убедился, что все DLL-файлы скопированы. –

+0

'Я также ослабил разрешения на папку с папкой проекта '- это звучит немного странно для меня. – Rippo

ответ

2

В ReSharper есть настройка, которая включена по умолчанию для тестовых экземпляров Shadow-copy. Он найден, перейдя в Resharper | Опции ..., Инструменты | Единичное тестирование.

Отключение этой опции запрещает копирование теневых копий в папку, в которой у DLL, по-видимому, не хватает разрешений для запуска, тем самым устраняя проблему.

tl; dr - Проверьте настройки ReSharper!

+1

Отлично! Я надеюсь, что другие люди, столкнувшиеся с этой проблемой с resharper, могут прийти к вашему комментарию. – Luty

2

Вы получили этот DLL-файл из Интернета?Если да, вы должны убедиться, что DLL не заблокирована Windows. Чтобы проверить это, перейдите к свойствам файла в проводнике Windows и убедитесь, что есть кнопка с надписью «Разблокировать». Если да, ваш файл заблокирован, вы должны нажать эту кнопку, чтобы разблокировать двоичный файл.

+0

К сожалению, это часть пакета nuget для SpecFlow v.1.9.2; но это хорошее предложение. –