ألقى مُهيئ النوع لـ "Nancy.Bootstrapper.AppDomainAssemblyTypeScanner" استثناءً

StackOverflow https://stackoverflow.com//questions/25080544

سؤال

أحصل على استثناء عندما أقوم بتنفيذ اختبارات الوحدة في مشروع نانسي.يعمل التطبيق كما هو متوقع، ولا أواجه المشكلة إلا عند تشغيل اختبارات الوحدة.

أنا أستخدم نانسي 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top