ASP.NET网站无法在App_Code文件夹中看到.cs文件

所以我有一个ASP.NET网站(不是Web应用程序)我在VS2010中用C#制作。 它在我的机器上运行正常,但是当我将它上传到它托管的站点时,它将无法编译,给出:“CS0246:找不到类型或命名空间名称’DataAccess’(你是否缺少using指令或assembly参考?)“

我一直在使用VS中的复制网站function,并且在我想将自己的类放在App_Code文件夹中并使用它之前没有任何问题。 我在其他答案中读到了将.cs属性更改为“编译”而不是“内容”,但在文件属性中没有这样的选项…只有文件名,完整路径和自定义工具。 这是.cs文件中的代码:

using System; using System.Data; using System.Data.SqlClient; using System.Web.Configuration; ///  /// Provides access to SQL Server database. ///  /// public class DataAccess { //Variables & public properties *********************************** private string connectionString = ""; private int recordCount = -1; ///  /// Property: gets count of records retrieved or changed ///  public int Count { get { return recordCount; } } //Class constructor is executed when object is initialized *********** ///  /// Connection string name in web.config file is required to initialize DataAccess ///  /// Name of web.config connection string public DataAccess(string ConnectionName) { if (WebConfigurationManager.ConnectionStrings[ConnectionName] == null) { throw new Exception("Cannot find connection string named '" + ConnectionName + "' in web.config"); } //Get connection string from web.config. connectionString = WebConfigurationManager.ConnectionStrings[ConnectionName].ConnectionString; } ///  /// Executes SELECT statement and returns results in dataTable ///  /// Select SQL statement ///  public DataTable FillDataTable(string SQL) { SqlConnection _objConn = new SqlConnection(connectionString); SqlDataAdapter objAdapter = new SqlDataAdapter(SQL, _objConn); DataTable dt = new DataTable(); try { objAdapter.Fill(dt); } catch (SqlException ex) { throw new Exception("Error in SQL:" + SQL, ex); } catch (Exception ex) { throw ex; //Bubbling exception up to parent class } finally { _objConn.Close(); } recordCount = dt.Rows.Count; return dt; } ///  /// Executes "non-query" SQL statements (insert, update, delete) ///  /// insert, update or delete /// Number of records affected public int ExecuteNonQuery(string SQL) { SqlConnection _objConn = new SqlConnection(connectionString); try { _objConn.Open(); SqlCommand objCmd = new SqlCommand(SQL, _objConn); recordCount = objCmd.ExecuteNonQuery(); } catch (SqlException ex) { throw new Exception("Error in SQL:" + SQL, ex); } catch (Exception ex) { throw new Exception(ex.Message); //Rethrowing exception up to parent class } finally { _objConn.Close(); } return recordCount; } public int ExecuteScalar(String SQL) { SqlConnection _objConn = new SqlConnection(connectionString); int intID; try { _objConn.Open(); SqlCommand objCmd = new SqlCommand(SQL, _objConn); intID = Convert.ToInt32(objCmd.ExecuteScalar()); } catch (SqlException ex) { throw new Exception("Error in SQL:" + SQL, ex); } catch (Exception ex) { throw new Exception(ex.Message); //Rethrowing exception up to parent class } finally { _objConn.Close(); } return intID; } }//end class 

从我的页面:

    protected void Page_Load(object sender, EventArgs e) { //Initialize dataAccess class DataAccess myDA = new DataAccess("A05Customers"); //Populate dataTable and bind to GridView Control string strSQL = "Select * from tblCustomers"; gvCustomers.DataSource = myDA.FillDataTable(strSQL); gvCustomers.DataBind(); }    GridView   

GridView




谢谢你的帮助!

默认情况下,网站不会编译.cs文件。 你需要做一些不同的事情。

  1. 将每个类文件设置为该类文件的属性中的“编译”。 您可以通过单击类文件,在属性资源管理器窗口中查看属性以及将“构建操作”下拉列表更改为“编译”来查看此选项。

  2. 如果上述方法无效,请从app_code中删除该类并将其放在根文件夹中。

你有app_code文件夹它是Web应用程序的根文件夹(不仅是文件夹或虚拟文件夹)。 看来Asp.NET无法看到app_code文件夹。

Conent和编译选项仅在WebApplication项目中可用。

我在开始帐户之前问过这个问题,否则我会编辑它。

之后我有同样的错误:

  1. 检查我有一个网站,而不是Web应用程序,因此没有.cs文件的编译/内容属性。

  2. 检查App_Code文件夹的位置。 我尝试将GridView.aspx放在root下以及它自己的文件夹中,同样的错误。 \ _ App_Code DataAccess.cs \ App_Data \ GridView GridView.aspx Web.config

  3. 将类从App_Code移动到root。 同样的错误。

  4. 这最后我认为会起作用,但没有。 使用“发布网站”function上载预编译的代码。 我可以看到它现在是bin文件夹中的DataAccess.dll,并且根目录中有一个PrecompiledApp.config文件。 同样的错误。

更新:解决了它:服务器上的文件夹结构就像本地文件夹一样, 我在子文件夹中包含了所有内容… App_Code和App_Data必须位于服务器的根目录中。

您可能需要在部署之前编译应用程序。 目前,ASP.NET无法了解未附加到.aspx / .ascx文件的.cs文件。 我建议您查看Web部署项目或使用Visual Studio 2010“发布”选项。 斯科特格思里给出了一个比我在这里更好的总结。