Я использую VS 2015 Update 2 с Resharper Ultimate 2016.1, и у меня есть эта странная проблема.Assembly.LoadFrom не загружает dll из bin debug при выполнении модульных тестов с помощью resharper
У меня есть тестовый проект Test, который ссылается на два проекта: Модель и Стойкость. Модельный проект содержит классы nhibernate entity, а проект Persistence содержит файлы * .hbm.xml. Они были получены с помощью llblgenpro 4.2. Я использую nhibernate 4.0.4.
инициализирую NHibernate с этим вызовом:
NHibernateSession.Init(
new SimpleSessionStorage(),
new string[] { "Persistence.dll", "Model.dll" });
Когда я бегу один из моих тестовых случаев NHibernate инициализация терпит неудачу с этим исключением:
System.IO.FileNotFoundException was unhandled by user code
FileName=file:///C:\Users\costa\AppData\Local\JetBrains\Installations\ReSharperPlatformVs14\Persistence.dll
FusionLog==== Pre-bind state information ===
LOG: Where-ref bind. Location = C:\Users\costa\AppData\Local\JetBrains\Installations\ReSharperPlatformVs14\Persistence.dll
LOG: Appbase = file:///C:/projects/csharp/Test/bin/Debug
LOG: Initial PrivatePath = NULL
Calling assembly : (Unknown).
===
LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: Using application configuration file: C:\Users\costa\AppData\Local\Temp\s0hjyhsk.jq1\a3514fde-acb9-4c62-a0ce-a586f8202f35.config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Attempting download of new URL file:///C:/Users/costa/AppData/Local/JetBrains/Installations/ReSharperPlatformVs14/Persistence.dll.
HResult=-2147024894
Message=Could not load file or assembly 'file:///C:\Users\costa\AppData\Local\JetBrains\Installations\ReSharperPlatformVs14\Persistence.dll' or one of its dependencies. The system cannot find the file specified.
Source=mscorlib
StackTrace:
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark)
at System.Reflection.Assembly.LoadFrom(String assemblyFile)
at SharpArch.NHibernate.NHibernateSession.<>c__DisplayClass36_0.<CreateSessionFactoryFor>b__0(MappingConfiguration m) in C:\work\sharp-arch\Solutions\SharpArch.NHibernate\NHibernateSession.cs:line 412
at FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration()
InnerException:
Если я копирую persistence.dll к C: \ Users \ costa \ AppData \ Local \ JetBrains \ Installations \ ReSharperPlatformVs14, тестовый сценарий отлично работает. persistence.dll находится в папке C:/projects/csharp/Test/bin/Debug, поскольку в проекте тестирования ссылается проект сохранения.
Все это отлично работало в VS 2013 с nhibernate 3.3.1. Кроме того, я получил все версии dll для выравнивания с помощью элементов сборщика в файле app.config тестового проекта.
Мои проекты целевые .Net 4.6 и я использую nunit 3.2.1.
Я нашел это:
Resharper runs UnitTest from different location
Однако в моем случае «Теневая копия сборка тестируется» выключен, используйте отдельный AppDomain для каждой сборки с тестами также отключаются. Run Tests from установлен в папку вывода Project.
Любые идеи, что может вызвать это?
Благодаря
Обновление: Если я это делать это работает:
string path = Assembly.GetExecutingAssembly().Location;
string directory = Path.GetDirectoryName(path);
NHibernateSession.Init(
new SimpleSessionStorage(),
new string[] { directory + "\\Persistence.dll", directory + "\\Model.dll" });
Update 2. Мой проект использует Sharp Architecture library. NHibernateSession - это класс, который принадлежит этой библиотеке.
Что такое 'NHibernateSession'? Это не выглядит как родная часть NHibernate. Если это какой-то пользовательский класс, вам сложно помочь, не имея его кода. Возможно, это какой-то класс, созданный llblgenpro: в таком случае было бы лучше попросить их о поддержке. –
И, возможно, вам будет проще оставить в стороне llblgenpro и работать непосредственно с вашими картами и сессионной фабрикой. Это позволит вам точно настроить их на нужды вашего бизнеса. (Вы можете прочитать больше о моем представлении [здесь] (/ a/35589532/1178314).) И у вас будет больше возможностей для обработки инициализации фабрики сеансов, например, в моем ответе [здесь] (/ a/35711701/1178314). –
@ Frédéric: Я обновил свой пост. Этот NHibernateSession принадлежит библиотеке s # arp-architecture.Извините, я пропустил это. – costa