Веб-сайт ASP.NET не видит файл.cs в папке App_Code
Так что у меня есть веб-сайт ASP.NET (не веб-приложение), который я делаю в VS2010 с C#. Он отлично работает на моем компьютере, но когда я загружаю его на сайт, на котором он размещен, он не компилируется, выдавая: "CS0246: не удалось найти тип или имя пространства имен" DataAccess "(если вы пропустили директиву using или ссылка на сборку?)
Я использовал функцию копирования веб-сайта в VS, и у меня не было проблем, пока я не захотел поместить свой собственный класс в папку App_Code и использовать его. В других ответах я читал об изменении свойств.cs для "Compile" вместо "Content", но для меня в свойствах файла такой опции нет... только Имя файла, Полный путь и Пользовательский инструмент. Вот код из файла.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
И с моей страницы:
<%@ 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>
Спасибо за вашу помощь!
4 ответа
По умолчанию веб-сайты не компилируют файлы.cs. Вам нужно будет сделать несколько разных вещей.
Установите для каждого файла класса значение "compile" в свойствах этого файла класса. Вы можете увидеть эту опцию, щелкнув файл класса, просмотрев свойства в окне обозревателя свойств и изменив раскрывающийся список Build Action на "Compile".
Если приведенное выше не поможет, удалите класс из кода приложения и поместите его в корневую папку.
У вас есть папка app_code это корневая папка веб-приложения (не только папка или виртуальная папка). Кажется, что Asp.NET не видит папку app_code.
Опции Conent и Compile доступны только в проекте WebApplication.
Я задал этот вопрос перед тем, как начать учетную запись, иначе я бы отредактировал его.
У меня такая же ошибка после:
Проверка, что у меня есть веб-сайт, а не веб-приложение, поэтому нет свойств компиляции / содержимого для файла.cs.
Проверка положения папки App_Code. Я попытался поместить GridView.aspx как в корневой каталог, так и в его собственную папку, та же ошибка. \ \App_Code DataAccess.cs \App_Data \GridView GridView.aspx Web.config
Перемещение класса из App_Code в корень. Та же ошибка
Последнее, что я думал, сработает, но не сработало. Использовал функцию публикации веб-сайта для загрузки предварительно скомпилированного кода. Я мог видеть, что теперь это был DataAccess.dll в папке bin, и в корневом каталоге был файл PrecompiledApp.config. Та же ошибка
ОБНОВЛЕНИЕ: решено: структура папок на сервере была похожа на локальную, но у меня все было в подпапке... App_Code и App_Data должны быть в корне сервера.
Вам, вероятно, нужно скомпилировать приложение перед его развертыванием. На данный момент ASP.NET не может узнать о файлах.cs, которые не прикреплены к файлам.aspx/.ascx. Я бы порекомендовал посмотреть проекты веб-развертывания или использовать опцию "Опубликовать" в Visual Studio 2010. Скотт Гатри дает лучшее резюме, чем я когда-либо мог здесь.