当尝试在ASP.NET MVC中使用Automapper时,如何消除SecurityException错误?

8
我正在使用NHibernate开发一个ASP.NET MVC应用程序,并尝试使用AutoMapper将领域对象隐藏在传递给视图的DTO对象中:
1. 包含我的领域(用于NHibernate)和DTO对象的ClassLibrary 2. 在我的项目中创建SessionFactory和Factories的类库
我下载了AutoMapper来转换领域对象为DTO,并在Application_Start中添加了代码。
当我在VisualStudio中运行应用程序(按F5),它可以正常工作,我的DTO被映射到视图中。
但是,当我在IIS上发布时,会出现安全异常。
Mapper.CreateMap<Category, CategoryDto>(); 
Mapper.CreateMap<Product, ProductDto>();

System.Security.SecurityException: 请求访问类型为 'System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 的权限失败。
我该如何在没有安全异常的情况下使Automapper正常工作?
3个回答

13

右键点击AutoMapper.dll > 选择属性 > 解除锁定。

然后重新启动IIS。


我已经在完全信任的情况下运行,直到意识到我的AutoMapper.dll被“阻止”,我感到困惑。很好的发现。 - daveidmx
我不得不从我的项目中删除引用,然后解除阻止并重新添加它,以使其正常工作。 - Samuel Jack
感谢,我已经解除了阻止,但没有重置IIS。经过iisreset后现在可以正常工作了。 - CRice
你必须重新启动IIS,不能只是解除阻止并重新编译你的网站。 - sdanna

3

为了拥有反射权限,您需要在IIS中以完全信任运行,可以参考这里的反射权限

或者参考这里设置信任级别

you need this because Automapper uses reflection to emit code o_O

0

解除dll文件的阻止(如Lee所述,右键单击AutoMapper.dll > 选择属性 > 解除阻止),然后只需回收站点的应用程序池即可。无需重新启动IIS。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接