2010-10-27 29 views
14

Vì vậy, tôi có một trang web ASP.NET (không phải ứng dụng web) tôi đang tạo trong VS2010 với C#. Nó chạy tốt trên máy tính của tôi, nhưng khi tôi tải nó lên trang web được lưu trữ, nó sẽ không biên dịch, đưa ra: "CS0246: Không thể tìm thấy loại tên hoặc không gian tên 'DataAccess' (bạn đang thiếu chỉ thị sử dụng hoặc một tham chiếu lắp ráp?) "Trang web ASP.NET không thể xem tệp .cs trong thư mục App_Code

Tôi đã sử dụng tính năng sao chép trang web trong VS và không có vấn đề gì cho đến khi tôi muốn đặt lớp của riêng mình trong thư mục App_Code và sử dụng nó. Tôi đọc trong các câu trả lời khác về việc thay đổi thuộc tính .cs thành "Biên dịch" thay vì "Nội dung", nhưng không có tùy chọn nào cho tôi trong thuộc tính của tệp ... chỉ Tên tệp, Đường dẫn đầy đủ và Công cụ tùy chỉnh. Dưới đây là đoạn code từ file .cs:

using System; 
using System.Data; 
using System.Data.SqlClient; 
using System.Web.Configuration; 

/// <summary> 
/// Provides access to SQL Server database. 
/// </summary> 
/// 
public class DataAccess 
{ 
    //Variables & public properties *********************************** 
    private string connectionString = ""; 
    private int recordCount = -1; 

    /// <summary> 
    /// Property: gets count of records retrieved or changed 
    /// </summary> 
    public int Count 
    { 
     get 
     { 
      return recordCount; 
     } 
    } 

    //Class constructor is executed when object is initialized *********** 
    /// <summary> 
    /// Connection string name in web.config file is required to initialize DataAccess 
    /// </summary> 
    /// <param name="ConnectionName">Name of web.config connection string</param> 
    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; 
    } 
    /// <summary> 
    /// Executes SELECT statement and returns results in dataTable 
    /// </summary> 
    /// <param name="SQL">Select SQL statement</param> 
    /// <returns></returns> 
    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; 
    } 

    /// <summary> 
    /// Executes "non-query" SQL statements (insert, update, delete) 
    /// </summary> 
    /// <param name="SQL">insert, update or delete</param> 
    /// <returns>Number of records affected</returns> 
    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 

Và từ trang của tôi:

<%@ Page Language="C#" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server"> 

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(); 
} 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>GridView</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div align="center" style="font-family: Verdana"> 
    <h2>GridView</h2> 
    <hr style="color: #0000FF" width="800" /> 
    <br /> 
    <asp:GridView ID="gvCustomers" runat="server" BackColor="#FFFFCC" BorderColor="#336699" BorderStyle="Inset" BorderWidth="5px" CellPadding="2" CellSpacing="4" /> 
    <br /> 
</div> 
    </form> 
</body> 
</html> 

Nhờ sự giúp đỡ của bạn!

+0

Xem câu hỏi được hỏi trước đây. Đây là một câu hỏi thường gặp. http://stackoverflow.com/questions/89570/app-code-folder-issues – David

Trả lời

0

Bạn có thể cần phải biên dịch ứng dụng của mình trước khi triển khai. Hiện tại, ASP.NET không có cách nào để biết về các tệp .cs không được đính kèm với tệp .aspx/.ascx. Tôi khuyên bạn nên xem xét các dự án triển khai Web hoặc sử dụng tùy chọn "Xuất bản" của Visual Studio 2010. Scott Guthrie đưa ra một bản tóm tắt tốt hơn tôi có thể here.

+0

luân phiên, anh ta có thể thử lưu lại web.config – jcolebrand

+0

Điều đó sẽ khởi động lại ứng dụng, nhưng tệp .cs trong "App_Code" của anh ta thư mục sẽ vẫn không bao giờ được biên soạn. – nizmow

5

Bạn có thư mục app_code là thư mục gốc của ứng dụng web (không chỉ thư mục hoặc thư mục ảo). Có vẻ như Asp.NET không thể thấy thư mục app_code.

Tùy chọn conent và biên dịch chỉ khả dụng trong dự án WebApplication.

20

Theo trang web mặc định không biên dịch tệp .cs. Bạn sẽ cần phải làm một vài điều khác nhau.

  1. Đặt từng tệp lớp thành "biên dịch" trong thuộc tính cho tệp lớp đó. Bạn có thể thấy tùy chọn này bằng cách nhấp vào tệp lớp, xem các thuộc tính trong cửa sổ trình khám phá thuộc tính và thay đổi danh sách thả xuống Xây dựng hành động thành "Biên dịch".

  2. Nếu phần trên không có tác dụng, hãy xóa lớp học khỏi mã ứng dụng và thả nó vào thư mục gốc.

+0

Có ai biết tại sao một số tệp CS cần phải thực hiện việc này sau đó và những tệp khác không? Tôi đã có cùng một vấn đề như OP với một tập tin tôi đã thêm thông qua VS2012 cho một dự án WebMatrix. Các lớp trong tập tin đó chỉ không được tìm thấy cho đến khi tôi đặt "hành động xây dựng" của tệp thành Biên dịch (đó là Nội dung) làm đề xuất của bạn (nhờ đó). Tuy nhiên, 3 tệp khác trong thư mục App_Code được đặt thành "Nội dung" và các lớp của chúng có thể truy cập được. Có phải là một tập tin cấu hình một nơi nào đó mà làm cho sự khác biệt hoặc một cái gì đó? –

+2

Tôi phát hiện ra rằng bạn cần thay đổi mọi thứ trong thư mục App_Code thành Build Action> Compile, sau đó thực hiện một giải pháp Clean, sau đó xóa tất cả các file của thư mục obj, sau đó Build Action> None (tùy chọn). Tôi thấy rằng tài liệu tham khảo Cache cũ dính xung quanh trong "obj" nếu bạn có * .cs tập tin trong thư mục App_Data, và biên dịch đã không thành công. – MacGyver

+0

DesignTimeResolveAssemblyReferencesInput.cache là tệp treo trong thư mục "obj". Xóa nó. – MacGyver

1

Tôi đã đặt câu hỏi này trước khi bắt đầu một tài khoản, nếu không tôi sẽ chỉnh sửa nó.

Tôi có lỗi tương tự sau:

  1. Kiểm tra rằng tôi có một trang web, không ứng dụng web, do đó không có Compile/tài sản nội dung cho file .cs.

  2. Kiểm tra vị trí của Thư mục App_Code. Tôi đã thử đặt GridView.aspx dưới gốc cũng như trong thư mục riêng của nó, cùng một lỗi. \ \ App_Code DataAccess.cs \ App_Data \ GridView GridView.aspx Web.config

  3. Di chuyển các lớp từ App_Code để root. Lỗi tương tự.

  4. Điều cuối cùng tôi nghĩ sẽ hiệu quả, nhưng không.Đã sử dụng tính năng Xuất bản trang web để tải lên mã biên dịch sẵn. Tôi có thể thấy rằng nó bây giờ là DataAccess.dll trong thư mục bin, và có một tập tin PrecompiledApp.config trong thư mục gốc. Lỗi tương tự.

UPDATE: giải quyết nó: cấu trúc thư mục trên máy chủ giống như một trong những địa phương, nhưng Tôi có tất cả mọi thứ trong một thư mục con ... App_Code và App_Data phải nằm trong thư mục gốc của máy chủ.

+0

Bạn đã lưu ngày của tôi. Tôi phải thực hiện một số thay đổi đối với trang web được thừa hưởng cổ xưa này. Tôi đã có App_code không chính xác dưới gốc trực tiếp nhưng một cấp xuống. Vì vậy, tôi đóng nó và mở thư mục như vậy mà App_code sẽ được ngay dưới gốc ... và không có lỗi. Cảm ơn bạn đã đặt CẬP NHẬT vào cuối. Nó đã giúp đỡ tôi. – shazia

Các vấn đề liên quan