首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用moles模拟MVC框架

无法使用moles模拟MVC框架
EN

Stack Overflow用户
提问于 2011-07-08 14:02:57
回答 3查看 1.4K关注 0票数 5

我尝试为System.Web.Mvc DLL版本3生成moles,但得到以下错误:

代码语言:javascript
复制
 Moles : info : metadata : loading C:\TFS.as12.Projects\Project X\Main\Source\3rdPartyComponents\MVC3\System.Web.Mvc.dll
    Moles : info : compilation : output assembly name: System.Web.Mvc.Moles
Moles : warning : metadata : failed to load module System.Web.Mvc.dll:
Moles : warning : metadata : Inheritance security rules violated by type: 'System.Web.Mvc.CompareAttribute'. Derived types must either match the security accessibility of the base type or be less accessible.
Moles : warning : metadata : Inheritance security rules violated by type: 'System.Web.Mvc.RemoteAttribute'. Derived types must either match the security accessibility of the base type or be less accessible.
Moles : error : code : assembly contains no types or failed to load properly
  00:00:00.53> moles generator 1 errors, 3 warnings

    Moles compilation FAILED - 6,18794176354816s
C:\Program Files (x86)\Microsoft Moles\bin\Microsoft.Moles.targets(79,5): error MSB3073: The command ""C:\Program Files (x86)\Microsoft Moles\bin\moles.exe" @"C:\TFS.as12.Projects\Project X\Main\Source\X.Web\X.Web.Base.Mvc.UnitTest\obj\Debug\Moles\moles.args"" exited with code -1002.

我在微软论坛上看到了更多关于这方面的问题,但从来没有得到答案。有谁有解决方案吗?

EN

回答 3

Stack Overflow用户

发布于 2011-10-29 02:31:09

这与known issue相关。如果你一心想在MVC3中使用Moles,你可以做以下事情(我已经做过了):

使用source code.

  • Remove从真实的MVC dll下载MS公钥:"sn -e System.Web.Mvc.dll ms_public_key.snk"

  • Tell VS to use the public key to use the public key
  1. MVC3 MVC dll (您可以在项目属性下,signing (签名)下执行此操作)。确保选中"delay sign only“复选框。
  2. Build。现在,您有了一个用MS公钥签名的假MVC dll。但你不能使用它做任何事情,因为它不会再次通过签名verification.
  3. Use sn.exe来注册一个跳过验证你的假dll:"sn -Vr System.Web.Mvc.dll“<-这需要是你的假的
  4. GAC你的带gacutil.exe的假的:"gacutil -if System.Web.Mvc.dll”<-再一次,假的一个
  5. 运行moles。我强烈建议你将整个dll存根/移动,因为你不会想要这样做的跳过验证:"sn -Vu System.Web.Mvc.dll“<-假的
  6. 恢复真正的dll:"gacutil -if System.Web.Mvc.dll”<-真实的
  7. 删除你的邪恶的假MVC dll,以免有人意外地使用它。

您在步骤8中生成的System.Web.Mvc.Moles.dll将引用真正的MVC dll,这要归功于您所做的公钥切换。您可以根据自己的需要使用它来存根/移动MVC类。

票数 3
EN

Stack Overflow用户

发布于 2011-08-23 20:33:01

您可以尝试排除有问题的类型:

代码语言:javascript
复制
<Moles ...
   <StubGeneration ...
       <Types>
          <Remove TypeName="System.Web.Mvc.CompareAttribute" />
          <Remove TypeName="System.Web.Mvc.RemoteAttribute" />
       </Types>
   <MoleGeneration>
       <Types>
          <Remove TypeName="System.Web.Mvc.CompareAttribute" />
          <Remove TypeName="System.Web.Mvc.RemoteAttribute" />
       </Types>
   </MoleGeneration>
票数 0
EN

Stack Overflow用户

发布于 2013-10-30 00:33:09

为了补充@bhamlin提到的内容,在第2步中,我还必须在AssemblyInfo.cs中进行以下更改以生成moles:

修改

代码语言:javascript
复制
[assembly: AllowPartiallyTrustedCallers]

代码语言:javascript
复制
[assembly: AllowPartiallyTrustedCallers(PartialTrustVisibilityLevel = PartialTrustVisibilityLevel.NotVisibleByDefault)]

因为这是在System.ComponentModel.DataAnnotations.dll中定义的

派生类型必须与基类型的安全可访问性匹配,或者是较少可访问的

ValidationAttribute是CompareAttribute的基类,它位于此程序集中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6620487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档