Пространство имен * уже содержит определение для *

#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 {