ألقى مُهيئ النوع لـ "Nancy.Bootstrapper.AppDomainAssemblyTypeScanner" استثناءً
-
02-01-2020 - |
سؤال
أحصل على استثناء عندما أقوم بتنفيذ اختبارات الوحدة في مشروع نانسي.يعمل التطبيق كما هو متوقع، ولا أواجه المشكلة إلا عند تشغيل اختبارات الوحدة.
أنا أستخدم نانسي 0.23.2.0.أنا أستخدم أيضًا Nancy.Authentication.Basic 0.23.2.0 وNancy.Bootstrappers.Unity 0.23.2.0 وNancy.Testing 0.23.2.0 في مشروع اختبار الوحدة.
لقد حصلت على Nancy src لهذا الإصدار ويمكنني تتبع المشكلة إلى AppDomainAssemblyTypeScanner.UpdateTypes() على وجه التحديد تعبير linq.
public static void UpdateTypes()
{
UpdateAssemblies();
types = (from assembly in assemblies
from type in assembly.SafeGetExportedTypes()
where !type.IsAbstract
select type).ToArray();
}
رمز الاختبار الذي أحصل فيه على الاستثناء هو:
[TestFixture]
public class IndexModuleTests
{
private Browser _browser;
[SetUp]
public void SetUp()
{
var bootstrapper = new ConfigurableBootstrapper(bootstrapperConfigurator =>
{
bootstrapperConfigurator.RootPathProvider(new TestRootPathProvider());
bootstrapperConfigurator.Module<IndexModule>();
bootstrapperConfigurator.RequestStartup((container, pipelines, context) =>
{
context.CurrentUser = new UserIdentity {UserName = "demo"};
});
});
_browser = new Browser(bootstrapper);
}
[Test]
public void ShouldAllowAuthenticatedUsersToBrowseSecuredPage()
{
var result = _browser.Get("/index", with => with.HttpRequest());
result.StatusCode.Should().Be(HttpStatusCode.OK);
}
}
الوحدة التي أحاول اختبارها:
public class IndexModule : NancyModule
{
public IndexModule()
{
this.RequiresAuthentication();
Get["/"] = parameters => View["index"];
}
}
يبدو تطبيق Bootstrapper كما يلي:
public class Bootstrapper : UnityNancyBootstrapper
{
protected override void ConfigureApplicationContainer(IUnityContainer contrainer)
{
contrainer.RegisterType<IUserValidator, UserValidator>();
}
protected override void ApplicationStartup(IUnityContainer container, IPipelines pipelines)
{
base.ApplicationStartup(container, pipelines);
pipelines.EnableBasicAuthentication(new BasicAuthenticationConfiguration(
container.Resolve<IUserValidator>(),
"MyAppDomain"));
}
protected override void ConfigureConventions(NancyConventions nancyConventions)
{
nancyConventions
.StaticContentsConventions
.Add(StaticContentConventionBuilder.AddDirectory("js", @"js"));
nancyConventions
.StaticContentsConventions
.Add(StaticContentConventionBuilder.AddDirectory("css", @"css"));
nancyConventions
.StaticContentsConventions
.Add(StaticContentConventionBuilder.AddDirectory("img", @"img"));
nancyConventions
.StaticContentsConventions
.Add(StaticContentConventionBuilder.AddDirectory("fonts", @"fonts"));
base.ConfigureConventions(nancyConventions);
}
}
الاستثناء:
SetUp : System.TypeInitializationException : The type initializer for 'Nancy.Bootstrapper.AppDomainAssemblyTypeScanner' threw an exception.
----> System.TypeLoadException : Could not load type 'Nancy.Bootstrapper.ApplicationRegistrations' from assembly 'Nancy, Version=0.23.2.0, Culture=neutral, PublicKeyToken=null'.
at Nancy.Bootstrapper.AppDomainAssemblyTypeScanner.TypesOf(ScanMode mode)
at Nancy.Conventions.NancyConventions.BuildDefaultConventions()
at Nancy.Conventions.NancyConventions..ctor()
at Nancy.Bootstrapper.NancyBootstrapperBase`1..ctor()
at Nancy.Bootstrapper.NancyBootstrapperWithRequestContainerBase`1..ctor()
at Nancy.Testing.ConfigurableBootstrapper..ctor(Action`1 configuration)
at Pandora.Web.Backoffice.Lite.Tests.IndexModuleTests.SetUp() in IndexModuleTests.cs: line 17
--TypeLoadException
at System.Reflection.RuntimeAssembly.GetExportedTypes(RuntimeAssembly assembly, ObjectHandleOnStack retTypes)
at System.Reflection.RuntimeAssembly.GetExportedTypes()
at Nancy.Extensions.AssemblyExtensions.SafeGetExportedTypes(Assembly assembly)
at Nancy.Bootstrapper.AppDomainAssemblyTypeScanner.<UpdateTypes>b__16(Assembly assembly)
at System.Linq.Enumerable.<SelectManyIterator>d__31`3.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray(IEnumerable`1 source)
at Nancy.Bootstrapper.AppDomainAssemblyTypeScanner.UpdateTypes()
at Nancy.Bootstrapper.AppDomainAssemblyTypeScanner.LoadAssembliesWithNancyReferences()
at Nancy.Bootstrapper.AppDomainAssemblyTypeScanner..cctor()
المحلول
نوع ApplicationRegistrations
تمت إعادة تسميته إلى Registrations
في يقترف 21c2f00
(الإصدار 0.23) لأنه تم تغييره ليشمل أيضًا التسجيلات على مستوى الطلب بالإضافة إلى التسجيلات على مستوى التطبيق.
يبدو أن لديك نسخة قديمة من التجميع موجودة في مكان ما، أو إصدار تبعية قديم لـ NuGet.حاول تنظيف مجلدات bin/obj الخاصة بك وتأكد من تحديث جميع تبعيات NuGet.