App_Code中的类无法访问。

214

我在ASP.NET中创建了一个网站,并创建了一个类并将其放置在App_Code文件夹中。但是我无法从其他页面访问它。需要进行配置才能允许此操作吗?我曾在以前的项目中使其工作,但在这个项目中却没有成功。

namespace CLIck10.App_Code
{
    public static class Glob
    {
        ...
    }
}

1
我假设你在网页中包含了命名空间? - Alex Czarto
1
可能是重复问题 - https://dev59.com/dEPXs4cB2Jgan1znlOhS#37838458 - vapcguy
8个回答

700

右键单击App_Code文件夹中的.cs文件,检查其属性。

确保"Build Action"被设置为"Compile"。


12
如何将此设置为默认的构建操作?还是我必须为 App_Code 文件夹中的每个文件都这样做? - Malachi
3
为什么我不能在Visual Studio 2012中做这个?! - R.S.K
4
这似乎是VS2012中的一个bug。我也遇到了这个问题。 - James Nail
2
想要了解更多细节,请访问以下链接:http://how-to-code-net.blogspot.ro/2014/04/appcode-classes-not-available-in-aspnet.html - Alexa Adrian
5
太棒了,这个解决方案解决了我在 Visual Studio 项目中的 142 个错误,非常感谢你分享这个解决方案 :-] - Michael G. Workman
显示剩余11条评论

14

把这段代码放在你想要访问该类的其他文件的顶部:

using CLIck10.App_Code;

或者可以像这样从其他文件中访问该类:

CLIck10.App_Code.Glob

不确定这是否与你的问题有关,但如果你是C#新手,这很容易让你困惑。

更新:我最近发现,如果我在项目中添加一个App_Code文件夹,那么我必须关闭/重新打开Visual Studio才能正确识别这个“特殊”的文件夹。


1
这似乎与构建操作有关 - FailBoy的答案解决了问题。无论如何,感谢您的回复 :) - Malachi
很好,我在App_Code文件夹中的类中添加了一个命名空间,这样就可以工作了。 - mashtheweb
为什么我们必须这样包含命名空间?为什么 IntelliSense 无法在不指定文件夹名称的情况下访问该类? - Elham Kohestani

11

前往您希望访问App_code类的页面,然后添加app_code类的命名空间。您需要提供一个using语句,如下所示:

using WebApplication3.App_Code;

之后,您需要转到app_code类属性并将“Build Action”设置为“Compile”。


6
我还没有搞清楚为什么会出现这种情况,但是我的App_Code文件夹中有些类相互调用方法,在构建.NET 4.5.2项目时运行良好,但是由于目标服务器未升级,我不得不将其还原为4.0。在修复了我的web.config中的langversion(另一个故事)后,我发现了这个问题...

我的其中一个方法一直报错,如下:

The type X.Y conflicts with the imported type X.Y in MyProject.DLL

在我的所有类属性中,它们的“编译”已经被设置好了,就像这里的接受答案建议的那样。每个类都有相同的命名空间,并且每个类在其顶部都有“using MyNamespace;”。 我发现,如果我只是将不良互相调用方法的类移到另一个名为“App_Code”以外的标准文件夹中,它们就不再存在这个冲突问题。 注意:如果你创建一个名为"AppCode"的标准文件夹,移动你的类到其中,删除"App_Code"文件夹,然后将"AppCode"重命名为"App_Code",你的问题会回来。无论你使用“新建文件夹”还是“添加ASP .NET文件夹”选项来创建“App_Code”,它似乎都与名称有关。 也许这只是.NET 4.0(可能更早)的问题……在我不得不还原之前,我在4.5.2中非常好。

1
意识到 App_Code 文件夹是一个特殊的名称,而且我认为我不需要任何项目魔法,所以我只是将其重命名为 ApplicationCode,现在一切都正常工作了。 - N-ate

4
确保您使用与页面相同的命名空间。

1
但是为什么当它在APP_CODE中时?我认为在那里的任何具有PUBLIC类的内容都应该自动暴露在整个解决方案中!? - Fandango68
类中不需要命名空间,而我也不会在我的通用类中使用命名空间。 - Lynn

1
在我的情况下,我无法使用在App_Code文件夹中定义的类来构建项目。
无法精确复制场景以发表评论,但必须关闭并重新打开Visual Studio才能使智能感知合作agree...
我注意到,当App_Code文件夹中的类设置为“编译”而不是“内容”(右键单击它)时,错误来自第二个版本的类...查看代码窗格和选项卡之间3个字段中最左边的一个。'其他'被称为10_App_Code或类似名称。
为了纠正这个问题,我将文件夹从App_Code重命名为Code,显式设置类的命名空间,并将所有类都设置为“编译”。

0
我想添加一个回答,解释为什么这种情况会发生在我身上。我只是使用了Visual Studio的新版本来添加到旧项目中,并使用了“添加Web表单”。我在App_Code中有一个类,在那组页面中,由于某种原因,无法访问。我尝试将类更改为“编译”,然后突然整个项目都抱怨该类存在于多个位置中,但实际上并不是这样(而且以3_Whatever开头)。
我卸载了项目文件,然后手动编辑它,发现即使属性窗口显示为“内容”,指令也是“编译”。而且,它没有添加SubType,在这方面与其他所有页面都不同。最后,aspx页面上有“CodeBehind”,而我也进行了更改,不确定是否需要,但至少看起来像其余部分一样!
<Content Include="MyFile.aspx.cs">
  <DependentUpon>MyFile.aspx</DependentUpon>
  <SubType>ASPXCodeBehind</SubType>
</Content>

现在一切都正常了。


0
我发现将文件移动到单独的类库项目中,然后在 Web 项目中引用该项目并在文件的 using 部分应用命名空间更容易。 由于某种原因,其他解决方案对我不起作用,但这个解决方法有效。

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