当前上下文中不存在该名称

66

所以,我在我的笔记本电脑和台式电脑之间进行这个项目。

项目在笔记本电脑上运行良好,但现在将更新后的源代码复制到台式电脑上后,项目中出现了500多个错误,所有这些错误都是...

名称“”在当前上下文中不存在

以下是一个例子...

Jobs.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Members/Members.master" AutoEventWireup="true" CodeFile="Jobs.aspx.cs" Inherits="Members_Jobs" %>

<%@ Register Namespace="AjaxControlToolkit" Assembly="AjaxControlToolkit" TagPrefix="aj" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <asp:UpdatePanel runat="server" ID="upJobs">
        <ContentTemplate>
            <!-- page content goes here -->
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Content>

Jobs.aspx.cs

public partial class Members_Jobs : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            loadJobs();
            gvItems.Visible = false;
            loadComplexes();
            loadBusinesses();
            loadSubcontractors();
            loadInsurers();

            pnlCallback.Visible = false;
            pnlInsurer.Visible = false;
        }
    }

    // more goes down here
}

这是 designer.cs 文件的示例...

namespace stman.Members {


    public partial class Jobs {

        /// <summary>
        /// upJobs control.
        /// </summary>
        /// <remarks>
        /// Auto-generated field.
        /// To modify move field declaration from designer file to code-behind file.
        /// </remarks>
        protected global::System.Web.UI.UpdatePanel upJobs;
    }
}
我知道这个错误意味着被引用的控件通常不存在或者不是引用它的类的一部分,但就我所看到的来说,在这里似乎不是这种情况。 有人能提供一些见解吗? VS2012 Screenshot

你在 designer.cs 文件中看到实例变量了吗? - Serge
事实上,我不仅需要页面上所有控件的定义,还需要它们的实际应用。 - Ortund
1
你将会有一个 Designer.cs 文件。删除它并重新生成。 - Bharadwaj
@SecretSquirrel 那么应该选哪一个呢?我认为设计师文件需要在它们的类定义中加上 Members_ - Ortund
如果@Ortund在这个问题上仍然遇到困难,我建议你像Bharadwaj建议的那样删除设计文件。然后,在解决方案资源管理器中,右键单击页面,有一个选项类似于“转换为Web应用程序”,这将重新生成您的设计文件。 - Squirrel5853
显示剩余3条评论
16个回答

28
检查你的命名空间。在将代码从一个项目复制到另一个项目时,如果忘记更改项目的命名空间,那么也会出现这个错误。

17

Jobs.aspx

这是物理文件 -> CodeFile="Jobs.aspx.cs"

这是处理页面事件的类 -> Inherits="Members_Jobs"

Jobs.aspx.cs

这是管理页面事件的部分类 -> public partial class Members_Jobs : System.Web.UI.Page

部分类的另一部分应该是 -> public partial class Members_Jobs,通常是设计文件。

你不需要部分类,可以在一个类中声明所有控件,也不需要设计文件。

编辑 27/09/2013 11:37

如果您仍然遇到此问题,我建议按照Bharadwaj的建议删除设计文件。然后,您可以右键单击解决方案资源管理器中的页面,有一个选项,类似于“转换为Web应用程序”,它将重新生成设计文件。


我理解所有的内容,但问题仍然存在。请查看我的更新问题,其中包含代码文件和设计师并排的截图。 - Ortund
谢谢你,Squirrel!我不确定如何重新生成设计文件...你能解释一下为什么需要这样做吗?我的意思是...这个项目发生了什么? - Ortund
1
如果您能保存旧的设计文件,然后创建新的文件来查看差异,那就太好了 :) - Squirrel5853
秘密松鼠?部队中的int操作? - CrackSmoker9000
“将其转换为Web应用程序”提示对我很有帮助。我首先删除了设计文件。 - deebs
显示剩余3条评论

7
“这个项目可以在笔记本电脑上运行,但现在将更新的源代码复制到台式机上后...”
我曾经做过类似的事情,创建了两个版本的项目,并在它们之间复制文件。结果我遇到了相同的错误。
我的解决办法是进入项目文件夹,在里面发现看起来像这样的东西:
<Compile Include="App_Code\Common\Pair.cs" />
<Compile Include="App_Code\Common\QueryCommand.cs" />

现在看起来是这样的:
<Content Include="App_Code\Common\Pair.cs">
  <SubType>Code</SubType>
</Content>
<Content Include="App_Code\Common\QueryCommand.cs">
  <SubType>Code</SubType>
</Content>

当我把它们改回来后,Visual Studio又变得开心了。

1
是的! 只有,你应该提到的是,如果你在Solution Explorer中点击类文件并获取它们的属性,你可以简单地将“Build Action”更改为“Compile”,它将做相同的事情。 当我创建一个App_Code文件夹并且放置我的代码时,这很棒,并且当时我无法弄清楚为什么它没有捕捉到这些类。 - vapcguy

7

来自MSDN网站:

如果你在一个循环、try块或if块中声明一个变量,然后尝试从一个封闭的代码块或另一个代码块中访问它,这个错误经常会发生。

因此,请在该块外声明变量。


5

当我引用dll文件时,我的主项目遇到了这个问题。

问题是引用dll的主项目针对的框架版本比dll文件本身低。

所以我提高了我的目标框架版本(右键单击项目 -> 应用程序 -> 目标框架),错误就消失了。


3

我遇到了一个与meta标签类似的问题。在designer.cs中,控件被定义为:

protected global::System.Web.UI.HtmlControl.HtmlGenericControl metatag;

我不得不将定义移到.aspx.cs文件中,并定义为:

protected global::System.Web.UI.HtmlControl.HtmlMeta metatag;

1
我也遇到了类似的问题,问题是表单在一个文件夹内,而文件.aspx.designer.cs中我有特定引用指向该目录的命名空间;这导致错误出现在多个组件中:

El nombre no existe en el contexto actual

在你的情况下,可能的解决方法是将Members_Jobs.aspx.designer.cs文件的namespace行全局指定,即将此行更改为:

namespace stman {

而不是

namespace stman.Members {

这是帮助我解决问题的方法。
希望对您有所帮助。

0
在我的情况下,我的主项目的 *.csproj 文件不知何故失去了对一个次要项目的引用,这可能发生在 Visual Studio 2022(从 VS 2017)的导入阶段中。 我检查了 *.csproj 文件的备份副本,发现整个 标签都丢失了。我手动从备份中复制了它,并且错误消失了。
  <ItemGroup>
    <ProjectReference Include="..\projectName\projectName.csproj">
        <Project>{cf9ab6e2-8e15-4915-820d-2d0d8f365cbf}</Project>
        <Name>ProjectName</Name>
    </ProjectReference>     
  </ItemGroup>

0

我通过在我的Page指令下使用Import指令来解决了这个问题。您可能还想将命名空间添加到Page指令的Inherits属性中。

由于您的默认命名空间是"stman.Members",因此尝试: <%@ Page Title="" Language="C#" MasterPageFile="~/Members/Members.master" AutoEventWireup="true" CodeFile="Jobs.aspx.cs" Inherits="stman.Members.Members_Jobs" %> <%@ Import Namespace="stman.Members"%>

此外,我想要在aspx.cs和aspx之间传递的数据,我将其放在命名空间内的静态类中。该静态类可用于在命名空间中移动数据,不再出现“未在上下文中”的错误。


0
在我们的情况下,除了将.csproj项目文件中的ToolsVersion从14.0更改为15.0之外,正如 Dominik Litschauer所述,我们还必须安装更新版本的MSBuild,因为编译是由Jenkins作业触发的。安装Visual Studio 2019的构建工具后,我们获得了MsBuild版本16.0,并且所有新的C#功能都编译成功了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接