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

时间:2010-11-05 19:04:11

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

所有

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

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

64位Windows Server上的IIS7上发生错误。同一页面适用于我的开发盒(32位Windows 7)和Visual Studio开发环境中的IIS7。我不知道IIS7配置有任何差异。

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

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

关于可能导致这种情况的任何想法?我的下一步是尝试简单地使用查询。

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

这看起来像是由于十进制类型的主键(1,0)。

答案 1 :(得分:1)

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

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

如果有效,请告诉我。

埃里克

答案 2 :(得分:0)

我在几行没有错误的代码行上遇到了同样的错误。幸运的是,我能够将我的更改恢复到工作状态并回溯我的步骤。事实证明,这是导致错误的同一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();
        });
    }