【问题标题】:InvalidProgramException: Common Language Runtime detected an invalid programInvalidProgramException:公共语言运行时检测到无效程序
【发布时间】:2011-05-05 18:47:01
【问题描述】:

全部,

我在部署 ASP.NET 4.0 网页时遇到了麻烦。错误是

System.InvalidProgramException:公共语言运行时检测到无效程序

该错误发生在 64 位 Windows Server 机器上的 IIS7 上。同一页面适用于我的开发盒(32 位 Windows 7)和 Visual Studio 开发环境中的 IIS7。我不知道 IIS7 配置有什么不同。

我使用 PEVerify 来验证应用程序 bin 目录中的 dll。

我可以通过使用实体框架查询来填充 DataGrid.DataSource 来重现该问题。这不是一个特别繁重的查询。

关于可能导致此问题的任何想法?我的下一步是尝试并简单地使用所使用的查询。

感谢您的帮助。

【问题讨论】:

    标签: asp.net iis-7 64-bit asp.net-4.0


    【解决方案1】:

    这似乎是由于小数 (1,0) 类型的主键所致。

    【讨论】:

    • 我在视图上有一个组合主键(由 EF 设计器创建)。其中一列是十进制 - BAM,错误:)。删除小数列作为主键解决了这个问题。谢谢
    • + 1 - 我遇到了同样的问题。我从一个视图组成了一个模型,设计者自动假设一堆字段(包括一个小数)是实体键的一部分。阅读这篇文章后,我检查了模型上的属性,并从实体集键中手动删除了不正确的字段。这解决了问题。谢谢!
    • +1 XSaint32,我没有想到检查 VS 是否自动将额外的列设置为实体键的一部分,因为我知道键是单列。一定要喜欢这样的时间槽陷阱。
    • 该错误被标记为已修复。您是否尝试过 EF 4.1? connect.microsoft.com/VisualStudio/feedback/details/620031/…
    • @hat 你是如何找到 EF 模型中的哪个表有额外的 PK 的?我有几百张桌子 - 不想一张一张地检查它们
    【解决方案2】:

    我认为这可能是很多问题。根据您的实体框架模型以及它的大小/复杂程度,您可能会遇到JIT compiler 的限制。这适用于 2.0,因此它也可能适用于 4.0。

    假设您没有任何庞大的方法,您是否为 Any CPU 编译了您的程序集?如果您指定了处理器,则 32/64 位之间的不匹配将导致问题。尝试使用 Any CPU 重新运行。

    让我知道这是否有效。

    埃里克

    【讨论】:

    • 数据模型不是很大也不是很复杂(约 25 个实体)。 CPU 是为 Any CPU 编译的。我对 2.0 问题的理解是,有一个热修复程序将局部变量限制提高到 400 万。我假设(希望)在创建 4.0 时没有被忽视。
    【解决方案3】:

    我在几个月没有错误的代码行中遇到了同样的错误。幸运的是,我能够将我的更改恢复到工作状态并追溯我的步骤。事实证明,是同一 Task.Run() 外壳中的一行代码导致了错误。可怕的是代码没有任何问题:var test = user.objectId.HasValue; 但是一旦我删除了这一行,错误就消失了。

        public virtual Task<IList<string>> GetRolesAsync(TUser user) {
            if (user == null)
                throw new ArgumentNullException("user");
            return Task.Run(() => {
                var test = user.objectId.HasValue;
                var userRolesQuery = objectManager.buildQueryByFilter<List<security.UserRole>>("user = '{0}'", user.objectId);
                objectManager.buildSubquery<TRole>("role", userRolesQuery);
                var userRoles = objectManager.openByQuery<List<security.UserRole>>(userRolesQuery);
                return (IList<string>)userRoles.Select(userRole => userRole.role.name).ToList();
            });
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 2022-01-25
      相关资源
      最近更新 更多