如何解决旧的ASP.NET代码可在一台计算机上运行,而不是另一台计算机上?
所以在我的global.asax中,我有以下代码:
Inventory.BusinessTier bt = new Inventory.BusinessTier();
string UserLogin = bt.ExtractLogin (Request.ServerVariables ["AUTH_USER"]);
Inventory.User myUser = new Inventory.User (UserLogin);
Session ["User"] = myUser;
在一台开发PC上运行正常,但是使用相同版本的Visual Studio,它在第三行出现以下错误:
System.TypeInitializationException:'用于的类型初始值设定项 “ Inventory.DataTier”引发了异常。 内部异常 NullReferenceException:对象引用未设置为的实例 对象。
除了在我的web.config中添加模拟的行(现在必须存在)之外,我没有更改任何东西。有没有办法获取更多信息?我什至无法跟踪它,因为如果我在User对象构造函数中放入调试行,它永远不会命中它。我有点茫然。不胜感激。
编辑以回答以下问题:
InventoryUser是一个非常简单的用户对象,它从数据库中读取当前信息,并将一些基本用户信息存储在属性中,例如UserID,Role,RoleID和IsAdmin。
DataTier类是与数据库交互的类。它用于多个项目,所以我很确定这不是问题。无论如何,我都尝试粘贴代码,但超出了发布的限制。
我可以肯定地确定问题与用户类别有关。它很短,所以我可以将其粘贴在这里:
using System;
using System.Data;
// This is the user business object. It contains information pertaining to the current user of the application. Notably,it
// contains the department ID,which determines what inventory items the user will see when using the application. Only
// specified employees with admin access can see all items for all departments,and that is determined by a specific department ID.
namespace Inventory {
public class User {
private Guid _UserID;
private Guid _RoleID;
private Guid _UserDepartmentID;
private string _UserRole = "";
private string _UserName = "";
private bool _IsAuthorizedUser = false;
private bool _IsAdmin = false;
// Attribute declarations
public Guid UserID {
get {
return _UserID;
}
set {
_UserID = value;
}
}
public string UserRole {
get {
return _UserRole;
}
set {
_UserRole = value;
}
}
public Guid RoleID {
get {
return _RoleID;
}
set {
_RoleID = value;
}
}
public string UserName {
get {
return _UserName;
}
set {
_UserName = value;
}
}
public Guid UserDepartmentID {
get {
return _UserDepartmentID;
}
set {
_UserDepartmentID = value;
}
}
public bool IsAdmin {
get {
return _IsAdmin;
}
set {
_IsAdmin = value;
}
}
public bool IsAuthorizedUser {
get {
return _IsAuthorizedUser;
}
set {
_IsAuthorizedUser = value;
}
}
// -----------------
// - Constructor -
// -----------------
public User (string UserLogin) {
string ShortUserLogin = ExtractLogin (UserLogin);
GetUser (ShortUserLogin);
}
// ------------------
// - ExtractLogin -
// ------------------
public string ExtractLogin (string Login) {
// The domain and "\" symbol must be removed from the string,leaving only the user name.
int pos = Login.IndexOf (@"\");
return Login.Substring (pos + 1,Login.Length - pos - 1);
}
// -------------
// - GetUser -
// -------------
// This method is called to fill the user object based on the user's login. It ultimately gets authorized user data
// from the user table.
public void GetUser (string UserName) {
DataTier dt1 = new DataTier();
DataTable dt = dt1.GetUserInfo (UserName);
int RecordCount = dt.Rows.Count;
switch (RecordCount) {
case 1: // There is one user name match,as there should be. This is the likely situation.
DataRow dr = dt.Rows[0];
UserID = (Guid)dr ["UserID"];
UserRole = (string)dr ["UserRole"];
RoleID = (Guid)dr ["RoleID"];
this.UserName = UserName;
UserDepartmentID = (Guid)dr ["DepartmentID"];
IsAdmin = (bool)dr ["IsAdmin"];
IsAuthorizedUser = true;
break;
case 0: // There are no user name matches (unauthorized use).
IsAdmin = false;
IsAuthorizedUser = false;
break;
default: // There are multiple user name matches (problem!).
IsAdmin = false;
IsAuthorizedUser = false;
break;
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。