#c# #asp.net
#c# #asp.net
Вопрос:
Я создал отдельную папку и страницы в моем ASP.NET веб-приложение. Когда я создаю решение, я получаю сообщение об ошибке
The Namespace MyApp already contains a defintion for VDS
Вот содержимое VDS.Master.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace MayApp{
public partial class VDS : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
Вот содержимое VDS.Master.designer.cs:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace MyApp.VDS {
public partial class VDS {
/// <summary>
/// Head1 control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlHead Head1;
/// <summary>
/// head control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.ContentPlaceHolder head;
/// <summary>
/// form1 control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
/// <summary>
/// ScriptManager1 control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.ScriptManager ScriptManager1;
/// <summary>
/// NavMenu control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Menu NavMenu;
/// <summary>
/// smds1 control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.SiteMapDataSource smds1;
/// <summary>
/// MainContent control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.ContentPlaceHolder MainContent;
/// <summary>
/// lblfoot control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
Вот содержимое VDS.Master:
<%@ Master Language="C#" AutoEventWireup="True" CodeBehind="VDS.Master.cs" Inherits="MyApp.VDS.VDS" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Dealer Services</title>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
<link href="Styles/master.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<div class="container">
<div class="header">
<h1>Welcome to Dealer Services </h1>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
</div>
<div class=" clear nav">
<asp:Menu runat="server" ID="NavMenu" BackColor="Silver" DataSourceID="smds1"
DynamicHorizontalOffset="2" Font-Names="Verdana" Font-Size="0.8em"
ForeColor="White" Orientation="Horizontal" StaticSubMenuIndent="10px">
<DynamicHoverStyle BackColor="#284E98" ForeColor="White" />
<DynamicMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
<DynamicMenuStyle BackColor="#B5C7DE" />
<DynamicSelectedStyle BackColor="#507CD1" />
<StaticHoverStyle BackColor="#284E98" ForeColor="White" />
<StaticMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
<StaticSelectedStyle BackColor="#507CD1" />
</asp:Menu>
<asp:SiteMapDataSource ID="smds1" runat="server" ShowStartingNode="False" />
</div>
<div class="login">
</div>
<div class="content">
<asp:ContentPlaceHolder id="MainContent" runat="server">
</asp:ContentPlaceHolder>
</div>
<div class="footer">
<asp:Label runat="server" ID="lblfoot">amp;trade; Veehco Inc. 2011</asp:Label>
</div>
</div>
</form>
</body>
</html>
Я пытался удалить файл VDS.Master.designer.cs, но ошибка возвращается при каждой сборке. Как мне исправить эту проблему?
Большое спасибо!
Комментарии:
1. является ли «пространство имен MayApp» опечаткой в вашем вопросе или в вашем коде?
2. Какие-либо другие файлы в этом проекте, объявляющие этот класс?
3. 1. пробовали ли вы «чистое решение» (Build -> Чистое решение в Visual Studio)? 2. искали ли вы в своем коде другие классы, называемые «VDS»?
4. Другой класс VDS также должен быть установлен как частичный. так ли это?
5. @Zach: Извините, должно быть MyApp вместо MayApp
Ответ №1:
Есть шанс, что вы преобразовали его в веб-приложение с веб-сайта? Я иногда сталкивался с этой проблемой, вызванной преобразованием.
Первая строка вашего файла VDS.master, вероятно, выглядит примерно так:
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="VDS.master.cs" Inherits="VDS" %>
Проблема, по крайней мере в моем случае, заключалась в том, что он использовал CodeFile
атрибут вместо CodeBehind
. Если ваш проект действительно является веб-приложением и ваша строка выше содержит CodeFile
, вы захотите изменить его на CodeBehind
, чтобы оно выглядело примерно так:
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="VDS.master.cs" Inherits="VDS" %>
Причина ошибки связана с тем, как обрабатываются эти два атрибута:
- CodeBehind: необходимо скомпилировать перед развертыванием, а скомпилированная сборка помещается в папку bin вашего веб-сайта.
- Кодовый файл: вы развертываете исходный код, и он компилируется по мере необходимости. Скомпилированная сборка помещается во временную ASP.NET папка.
Если ваш проект является веб-приложением, но оно использует атрибут CodeFile, в конечном итоге он будет скомпилирован вами, а затем также скомпилирован во время выполнения, что приведет к двум разным сборкам, которые содержат определения для одних и тех же классов. Затем все взрывается.
Комментарии:
1. Первая строка действительно имеет атрибут CodeBehind и имеет значение MyApp.VDS.
2. Черт возьми… Я надеялся, что проблема была в этом. Возможно, это просто опечатка, но вы сказали, что ваш атрибут CodeBehind указывает на «MyApp.VDS» — он должен указывать на «VDS.Master.cs», а не на пространство имен.
3. Извините, просматривал атрибут Inherits: Codebehind=»VDS.Master.cs» Inherits=»MyApp.VDS.VDS»
4. Я полагал, что это так. Просто проверяю. Тогда не совсем уверен, в чем проблема. Не могли бы вы опубликовать остальную часть вашего кода (файлы .cs, .master и designer)?
Ответ №2:
У вас случайно нет файла с таким же именем, что и пространство имен?
Например, главный файл называется так же, как пространство имен и проект!
Комментарии:
1. БОЖЕ! БОЖЕ! У меня действительно был мой проект в той же папке, что и пространство имен, которое я использовал. Спасибо! Я пробовал все эти предложения здесь в течение последних 3 дней после работы (личный веб-сайт).
2. Изначально мое приложение было веб-приложением, поэтому преобразование не производилось, как описано в принятом ответе. Я добавил главную страницу с пространством имен WebApp.LoggedIn.Export.ExportPage, и в пространстве имен WebApp.MasterPages была другая главная страница с именем LoggedIn
Ответ №3:
В файле designer и .master у вас есть пространство имен VDS, которое конфликтует с классом VDS.
Измените наследование в .master из:
Inherits="MyApp.VDS.VDS"
Для:
Inherits="MyApp.VDS"
и файл конструктора из:
namespace MyApp.VDS {
Для:
namespace MyApp {
Ответ №4:
Джоэл попал в точку, у меня была такая же проблема, и я был склонен переименовать и использовать короткий путь. Но, потратив время на расследование, стоило восстановить доверие к инструменту.
В моем проекте у меня был класс Admin в пространстве имен MyNamespace.
И я пытался создать MyNamespage.Администратор.
Я изменил класс Admin на Administrator, и это работает.
Ответ №5:
Это означает, что у вас уже есть 1 определение VDS где-то в вашем пространстве имен, вы должны выяснить. Обычно это происходит из-за перемещения или редактирования файла в VS Studio
В вашем случае,
namespace MyApp{
public partial class VDS : System.Web.UI.MasterPage
Это означает, что вы уже определили MayApp.VDS
после этого. в вашем дизайне
namespace MyApp.VDS {
public partial class VDS {
MyApp.VDS не пространство имен, VDS — это класс
таким образом, вы просто удаляете vds в своем файле дизайна, теперь будет
namespace MyApp{
public partial class VDS {