مشكلة مع السيارات في IIS7 عند استخدام التجميعات الموقعة

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

  •  20-09-2019
  •  | 
  •  

سؤال

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

AutoMapper.AutoMapperMappingException was unhandled by user code
  Message="Trying to map TestLibrary.Source to WebApplication1.Destination.\nUsing mapping configuration for TestLibrary.Source to WebApplication1.Destination\nException of type 'AutoMapper.AutoMapperMappingException' was thrown."
  Source="AutoMapper"
  StackTrace:
       at AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext context)
       at AutoMapper.MappingEngine.Map(Object source, Type sourceType, Type destinationType)
       at AutoMapper.MappingEngine.Map[TSource,TDestination](TSource source)
       at AutoMapper.Mapper.Map[TSource,TDestination](TSource source)
       at WebApplication1._Default.Page_Load(Object sender, EventArgs e)
       at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
       at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
       at System.Web.UI.Control.OnLoad(EventArgs e)
       at System.Web.UI.Control.LoadRecursive()
       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
  InnerException: AutoMapper.AutoMapperMappingException
       Message="Trying to map TestLibrary.Source to System.Object.\nUsing mapping configuration for TestLibrary.Source to WebApplication1.Destination\nDestination property: Value\nException of type 'AutoMapper.AutoMapperMappingException' was thrown."
       Source="AutoMapper"
       StackTrace:
            at AutoMapper.Mappers.TypeMapObjectMapperRegistry.PropertyMapMappingStrategy.MapPropertyValue(ResolutionContext context, IMappingEngineRunner mapper, Object mappedObject, PropertyMap propertyMap)
            at AutoMapper.Mappers.TypeMapObjectMapperRegistry.PropertyMapMappingStrategy.Map(ResolutionContext context, IMappingEngineRunner mapper)
            at AutoMapper.Mappers.TypeMapMapper.Map(ResolutionContext context, IMappingEngineRunner mapper)
            at AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext context)
       InnerException: System.Security.SecurityException
            Message="Request failed."
            Source="Anonymously Hosted DynamicMethods Assembly"
            StackTrace:
                 at lambda_method(ExecutionScope , Object )
                 at AutoMapper.Internal.PropertyGetter.GetValue(Object source)
                 at AutoMapper.Internal.MemberGetter.Resolve(ResolutionResult source)
                 at AutoMapper.PropertyMap.ResolveValue(Object input)
                 at AutoMapper.Mappers.TypeMapObjectMapperRegistry.PropertyMapMappingStrategy.MapPropertyValue(ResolutionContext context, IMappingEngineRunner mapper, Object mappedObject, PropertyMap propertyMap)
            InnerException: 

خطوات لإعادة إنتاج المشكلة:

1) إنشاء تطبيق ويب جديد باستخدام Visual Studio 2008 على جهاز مع تثبيت IIS 7. (نحن نستخدم Windows 7).

2) قم بتنزيل Automapper.dll من http://www.codeplex.com/automapper. (نحن نستخدم الإصدار 0.4.xx) وأضف مرجعًا إلى DLL إلى تطبيق الويب الخاص بك.

3) ضع الرمز التالي في الكود وراء الصفحة الافتراضية:

using System;
using AutoMapper;
using TestLibrary;

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Mapper.CreateMap<Source, Destination>();
            Mapper.AssertConfigurationIsValid();

            var source = new Source {Value = "Automapper works!" };
            var destination = Mapper.Map<Source, Destination>(source);

            Response.Clear();
            Response.ContentType="text/plain";
            Response.Write(destination.Value);
            Response.End();
        }
    }

    public class Destination
    {
        public object Value { get; set; }
    }

4) إنشاء مكتبة فئة جديدة تسمى "TestLibrary" وقم بإعادة تسمية ملف class1.cs إلى Source.cs ووضع الكود التالي في:

namespace TestLibrary
{
    public class Source
    {
        public object Value { get; set; }
    }
}

5) إضافة مرجع إلى هذه المكتبة إلى تطبيق الويب الخاص بك.

6) قم بتشغيل الحل ويجب أن ترى "أعمال السيارات!" انتاج.

7) لجعلها تفشل ، يجب أن تفعل شيئين.
ط) تكوين موقع الويب لتشغيله تحت IIS بدلاً من خادم Visual Studio Development. II) التوقيع على مجموعة الاختبار. بعد ذلك ، يجب أن ينتج تشغيل الحل الخطأ المبلغ عنه أعلاه.

هل لدى أي شخص أي فكرة عن كيفية الالتفاف على هذا؟ لقد فحصنا وتطبيق يعمل مع استئمال كامل تم ترقيته وحدة التحكم في إدارة IIS.

هل كانت مفيدة؟

المحلول

لذلك يأتي هذا الاستثناء من إنشاء تعبير Lambda برمجيًا ثم تجميعه. هل يمكنك محاولة فعل نفس الشيء ، فقط في default.aspx.cs؟ طريقة واحدة للقيام بذلك هي إنشاء تعبير Lambda في الكود:

التعبير> expr = () => 5 ؛

ثم افعل:

var func = expr.compile () ؛

إنه سطر مثل هذا الفشل بالنسبة لك.

إذا نجح هذا ، فأنا بعد ذلك أضع هذا الرمز في هذا التجميع الموقّع ، والوصول إليه من تطبيق الويب.

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