对于我的团队最近开始的项目,当我尝试运行新创建的SpecFlow单元测试时,我遇到了以下异常:
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.
我(和我的团队)对此感到困惑,因为我们尝试过以下事项:
packages
目录中的文件夹权限packages
目录中的DLL重新关联到C#项目。没效果。Castle.Core
,NHibernate.ByteCode.Castle
和log4net
丢失了,所以我将这些添加到正在进行数据访问的项目中(C :\项目\ SomeProject \ SomeProject.Core);没有效果。 (之所以添加,是因为那些我可以运行特征测试的项目,这意味着它只是这个特定的解决方案。)iisreset
解决他的问题的故事;我试过这个,没有效果。问题:是什么原因导致Iesi.Collections.dll在NHibernate初始化时抛出Access Denied FileLoadException?
答案 0 :(得分:2)
您是否从Internet获取此DLL文件?如果是,则必须确保Windows不阻止DLL。要检查此项,请转到Windows资源管理器中的文件属性,并验证是否有标记为“取消阻止”的按钮。如果是,您的文件被阻止,您必须单击此按钮才能取消阻止二进制文件。
答案 1 :(得分:2)
在ReSharper中,默认情况下有一个设置处于正在测试的Shadow-copy程序集中。通过去Resharper |找到它选项......,工具|单元测试。
禁用此选项可防止将程序集阴影复制到DLL显然缺少运行权限的位置,从而解决问题。
tl; dr - 检查您的ReSharper设置!