命名空间中不存在类型或命名空间名称(是否缺少程序集引用?)

6
我知道这个问题已经被问过了,但是我找不到任何可以帮助解决我的问题的东西。
我想把我的aspx页面(Retete.aspx)连接到一个Microsoft SQL数据库。我在Retete.aspx.cs上遇到了这个错误:

错误1:名称空间'ProiectSera'中不存在'GlobalClass'类型或命名空间(是否缺少程序集引用?) 该错误指向以下代码行:

ProiectSera.GlobalClass.Update(ValRefTempSol.Text, ValRefTempAer.Text);

其中ProiectSera是项目名称,GlobalClass是我在数据库上进行操作的文件。

我的using语句如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ProiectSera;

目标框架设置为

我该怎么做来解决这个错误?

更新 我的GlobalClass.cs文件如下:

using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.IO;
using ProiectSera;

using System.Data.Services;

namespace ProiectSera.App_Code
{
    public static class GlobalClass
    {
        static public void Update(string _param1, string _param2)
        {//function to update}
}
}

App_Code是一个文件夹,其中包含GlobalClass.cs。我尝试过了。

ProiectSera.App_Code.GlobalClass.Update(ValRefTempSol.Text, ValRefTempAer.Text); //

但我遇到了同样的错误。我将GlobalClass.cs放在项目的根目录中。我还从namespace ProiectSera.App_Code中移除了.App_Code

更新1 我的Retete.aspx.cs如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ProiectSera;
using ProiectSera.App_Code;

namespace ProiectSera
{
    public partial class Retete : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnSave_Click(object sender, EventArgs e)
        {
            string intValRefTempSol;
            string intValRefTempAer;

 //           intValRefTempSol = ValRefTempSol.Text;
 //           intValRefTempAer = ValRefTempAer.Text;


   //         ProiectSera.App_Code.GlobalClass.Update(ValRefTempSol.Text, ValRefTempAer.Text);
            GlobalClass.Update(ValRefTempSol.Text, ValRefTempAer.Text);
}
}
}

2
重要的不是你的“using”语句中写了什么,而是你的“项目引用”中有什么。 - Bryce Wagner
GlobalClass是文件还是类?请确保它是公开的。 - tchelidze
@BryceWagner,“Project References”应该包含什么?@tchelidze是一个名为GlobalClass.cs的文件。它是公共的。 - user5949912
@AlfieGoodacre ProiectSera 是我的 VS 项目的名称。 - user5949912
还要确保所引用的项目的目标框架是兼容的。 - MBender
显示剩余13条评论
3个回答

3

您的GlobalClass位于命名空间ProiectSera.App_Code中。

因此,类名为ProiectSera.App_Code.GlobalClass

请确保在ProiectSera命名空间中没有ProiectSera类,否则,如果在顶部声明using ProiectSera,它将尝试使用它(通常情况下,请不要将任何类命名为与命名空间相同的名称)。

如果仍然无法正常工作,则可以尝试使用global命名空间:

global::ProiectSera.GlobalClass.Update(ValRefTempSol.Text, ValRefTempAer.Text);

尝试这个方法:如果不行,而且GlobalClass在同一个项目中,那么你还有其他没有展示给我们的问题。

更新

如果你确定两个文件在同一个项目/程序集中,唯一能想到的其他问题是GlobalClass.cs实际上没有被编译。确保Build Action设置为Compile(可以右键单击解决方案资源管理器中的GlobalClass.cs并选择属性查看构建操作)。


1
@magn 在你的更新之后,如果你可以百分之百确定GlobalClass.csRetete.cs在同一个项目中(即使在不同的文件夹中),如果global::ProiectSera.App_Code.GlobalClass.Update(...)没有起作用,那么唯一能想到的就是你的GlobalClass.cs没有被编译。确保在GlobalClass.cs上的Build Action设置为Compile(右键单击解决方案资源管理器中的文件并选择属性以查看属性窗口)。 - Jcl
@magn 所以它没有被编译? - Jcl
是的,我没有将编译操作设置为Build Action。再次感谢! - user5949912

3
如果您正在使用VS.NET:
  1. 右键单击项目中的“引用”文件夹。
  2. 选择“添加引用”。
  3. 选择“.NET”选项卡(如果不是.NET Framework程序集,则选择“浏览”按钮)。
  4. 双击包含错误信息中命名空间的程序集。
  5. 按下“确定”按钮。

0

请确保以下内容...

  • 如果GlobalClass在一个单独的库中,请确保您的Web应用程序引用了ProiectSera项目。如果GlobalClass在Web应用程序项目本身中,则不需要此操作,但是如果GlobalClass在同一解决方案或其他地方的单独库中定义,则需要在Web应用程序中add a reference到该外部库。
  • 确保ProiectSera不应该是ProjectSera(如果这是一个拼写错误)。
  • 确保您在顶部放置了ProiectSera的using语句(using ProiectSera;)。假设这是正确的命名空间。检查GlobalClass类的命名空间,并相应地在希望使用其功能的类中使用该using。
  • 然后,在您的代码中简单地调用此方法,假设Update是GlobalClass的静态方法。

    GlobalClass.Update(ValRefTempSol.Text, ValRefTempAer.Text);

编辑:鉴于您现在已经发布了GlobalClass代码,您可以看到该类的命名空间为ProiectSera.App_Code;。因此,在其他类中,您需要将其作为使用语句using ProiectSera.App_Code;。然后通过简单的GlobalClass.Update调用它,如上所述。

如果您不了解C#中的命名空间是如何工作的,那么我建议您查看这个(https://msdn.microsoft.com/en-us/library/dfb3cx8s.aspx)。


它可以实现,但如果您在同一项目中没有正确引用GlobalClass,则也可能会出现问题。这需要您根据GlobalClass的命名空间拥有正确的using语句。然后正确地引用该类和方法(如我上面所写)。 - ManoDestra
我按照您的建议尝试了去掉项目名称,只留下:GlobalClass.Update(ValRefTempSol.Text, ValRefTempAer.Text); 但问题仍然存在。我已经更新了我的问题并提供了更多信息。 - user5949912
Retete.aspx.cs在项目的根目录中。GlobalClass是在App_Code文件夹中,该文件夹也在同一项目中。我应该把“using ProiectSera.App_Code;”放到Retete.aspx.cs中,对吗? - user5949912
如果它确实在同一个项目中,那么您可以通过 ProiectSera.App_Code.GlobalClass.Update(param1, param2); 进行调用;或者您可以包含命名空间的 using ProiectSera.App_Code;。然后,您就可以直接使用 GlobalClass.Update(param1, param2); 如果你只是输入GlobalClass而没有使用,并且然后右键单击GlobalClass,它应该会出现如何插入它的选项,有或没有using。如果它没有通过智能感知提供任何建议,则GlobalClass不在该项目中,您没有对它的引用。 - ManoDestra
我缺少什么引用?System.Configuration已经添加了。 - user5949912
显示剩余7条评论

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