0

我有一个使用 NHibernate.dll 的项目。我们将项目迁移到使用 .Net Framework 4.0。我们使用 FxCop 和 FxCop 启动失败并出现错误

无法解析程序集 Nhibernate.dll 所以我的猜测是如果我可以将 NHibernate.dll 移动到 .Net Framework 4.0 就可以了。

我试过了,它给出了大约 100 个错误,关于我使用的是哪个 ISet 是 System.** 还是 Ies.Collections.Generic。我使用了 Ies.Collection.Generic 因为 Nhibernate 引用了它。

我成功地将其迁移到 .Net 4。但是当我访问我的 Web 应用程序时,我收到了以下消息。

Inheritance security rules violated while overriding member: 'NHibernate.Cfg.Configuration.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)'. Security accessibility of the overriding method must match the security accessibility of the method being overriden.

虽然我根本没有压倒任何东西。我在互联网上搜索并找到了几篇文章,但我不想更改 NHibernate 代码,因为那不是我的代码。

为什么我不使用最新的 NHibernate? 因为当我使用它时,我的项目坏了,错误是没有使用 3 个参数(我的项目使用)的重载方法

FilterDefinition(string name, string defaultCondition, IDictionary<string, IType> parameterTypes, bool useManyToOne);

现在他们有第四个参数,我不确定结果会是什么。

问题

有人可以帮我解决这个错误吗?

有人成功将 NHibernate 迁移到 .Net 4 吗?

谢谢

参考:

http://forums.lhotka.net/forums/t/9914.aspx

覆盖成员时违反继承安全规则 - SecurityRuleSet.Level2 http://community.codesmithtools.com/Template_Frameworks/f/67/p/12331/47618.aspx#47618

Fluent NHibernate 和 .NET 4 的奇怪覆盖问题

4

2 回答 2

1

这个下面的链接帮助了我,奥斯卡评论了

https://github.com/oskarb/nhibernate-core/commit/d5f10c538440c127341159b31bff242ff9d687af

于 2012-09-26T11:04:40.680 回答
1

我知道这不是您正在寻找的答案,但这就是我从以下位置进行升级的方式:

asp.net 2.0、IIS6、NH 2.1、MVC2 项目:

asp.net 4.0、IIS7.5、NH3.3、MVC4

  1. 确保我对项目的大部分进行了集成测试(我不会说谎,这是我自己花费大量时间来实现的)。还可以使用错误记录模块,如 ELMAH
  2. 升级到 NH 3.3、运行测试、实时推送并离开一周以捕获任何错误。问题
  3. 升级到 SLN .NET 4 (不需要重新编译 NH),运行测试,实时推送并离开一周以捕获任何错误
  4. 从MVC2升级到MVC3,运行测试并推送直播,请假一周
  5. 最后从 MVC3 升级到 MVC4

就我个人而言,我发现这是最好的方法,并且肯定会减少我的痛点,因为我在任何时候都没有做太多事情。如果没有覆盖大约 70% 代码的集成测试,我也无法做到这一点。

如果我直接使用 .net 4 和 NH.3.3,那么我将陷入痛苦的世界,因为升级任何项目总是存在问题。我对有价值的建议是慢慢做。

还有一个伟大的想法是进行集成测试,以便将来的代码修改或升级应该是无痛的。

于 2012-09-22T06:12:14.207 回答