Question

Je suis en train d'utiliser AutoMapper avec une application Web en cours d'exécution sur IIS 7. L'utiliser si comptais types de carte domaine défini dans une dll externe pour voir les modèles définis dans l'application IIS. Cela fonctionne bien, sauf lorsque la dll externe est roussi. Puis-je obtenir l'erreur suivante:

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: 

Procédure pour reproduire le problème:

1) Créer une nouvelle application Web en utilisant Visual Studio 2008 sur une machine avec IIS 7 installé. (Nous utilisons Windows 7).

2) Télécharger le AutoMapper.dll de http://www.codeplex.com/AutoMapper . (Nous utilisons la version 0.4.x.x) et ajouter une référence à cette dll à votre application web.

3) Placez le code suivant dans le code derrière la page par défaut:

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) Créer une nouvelle bibliothèque de classe nommée « TestLibrary » et renommez le fichier Class1.cs Source.cs et mettre le code suivant dans:

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

5) Ajoutez une référence à cette bibliothèque à votre application Web.

6) Exécutez la solution et vous devriez voir le « Automapper fonctionne! » sortie.

7) Pour le faire échouer, vous devez faire deux choses.
   i) Configurer le site Web pour exécuter sous IIS au lieu du serveur de développement Visual Studio.    ii) Créer l'ensemble TestLibrary.    Après cela, la solution en cours d'exécution doit produire l'erreur indiquée ci-dessus.

Est-ce que quelqu'un a une idée comment contourner ce problème? Nous avons vérifié et l'application fonctionne avec la confiance complète accourding la console de gestion IIS.

Était-ce utile?

La solution

Donc, cette exception vient de créer une expression lambda programme, puis le compiler. Pouvez-vous essayer de faire la même chose, juste dans les Default.aspx.cs? Une façon de le faire serait de créer une expression lambda dans le code:

Expression> expr = () => 5

puis faites:

var func = expr.Compile ();

il est une ligne comme ça que ça ne vous.

Si cela fonctionne, je serais alors mis à côté ce code dans cette assemblée signé et y accéder à partir de l'application Web.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top