Frage

Ich versuche zu benutzen Automapper Bei der Webanwendung auf IIS 7. Die beabsichtigte Verwendung ist sie so, dass Domänentypen in einer externen DLL definiert werden, um Modelle anzuzeigen, die in der IIS -Anwendung definiert sind. Dies funktioniert einwandfrei, außer wenn die externe DLL gesungen wird. Dann bekomme ich den folgenden Fehler:

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: 

Schritte, um das Problem zu reproduzieren:

1) Erstellen Sie eine neue Webanwendung mit Visual Studio 2008 auf einem Computer mit installierten IIS 7. (Wir verwenden Windows 7).

2) Laden Sie den Automapper.dll von herunter http://www.codeplex.com/automapper. (Wir verwenden Version 0.4.xx) und fügen Sie dieser DLL zu Ihrer Webanwendung eine Referenz hinzu.

3) Platzieren Sie den folgenden Code in den Code für die Standardseite:

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) Erstellen Sie eine neue Klassenbibliothek mit dem Namen "Testlibrary" und benennen Sie die Datei class1.cs in Source.cs um und geben Sie den folgenden Code ein in:

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

5) Fügen Sie Ihrer Webanwendung einen Verweis auf diese Bibliothek hinzu.

6) Führen Sie die Lösung aus und Sie sollten den "Automapper funktioniert!" Ausgang.

7) Um es zu scheitern, müssen Sie zwei Dinge tun.
i) Konfigurieren Sie die Website so, dass sie unter IIS anstelle des Visual Studio Development Server ausgeführt werden. ii) Signieren Sie die Testlibrary -Baugruppe. Danach sollte das Ausführen der Lösung den oben angegebenen Fehler erzeugen.

Hat jemand eine Idee, wie man das umgeht? Wir haben überprüft und die Anwendung wird mit vollem Vertrauen ausgeführt, in dem die IIS -Managementkonsole abgestimmt ist.

War es hilfreich?

Lösung

Diese Ausnahme entsteht also aus der Erstellung eines Lambda -Ausdrucks programmgesteuert und dann. Können Sie versuchen, dasselbe zu tun, nur in der Standardeinstellung.aspx.cs? Eine Möglichkeit, dies zu tun, besteht darin, einen Lambda -Ausdruck in Code zu erstellen:

Ausdruck> expr = () => 5;

dann mach:

var func = exprr.comPile ();

Es ist eine solche Zeile, die für Sie fehlschlägt.

Wenn dies funktioniert, würde ich dann diesen Code als nächstes in diese signierte Montage einfügen und aus der Webanwendung darauf zugreifen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top