问题描述:
在 C# web 应用程序中,有时候会遇到一个问题,当我们把一些公共的类、控件或者数据访问层的代码放在 App_Code 目录下时,编译时会报错,提示某些命名空间或者模块不存在。
产生原因:
这个问题产生的根本原因是 ASP.NET 应用程序编译的方式不同于普通的 C# 应用程序。一般情况下,编译器会首先编译 App_Code 下面的代码,然后才会编译其他代码,但是在 ASP.NET 应用程序中,编译的先后顺序不同,导致了这个问题的出现。
解决方案:
要解决这个问题,就需要告诉编译器先编译 App_Code 下的代码。有两种方法可以实现这个目标。
方法一:在 Web.config 文件中手动添加
我们可以在 Web.config 文件中手动添加
- 打开 Web.config 文件,在
节点下添加 和 节点。
<configuration>
<system.web>
<compilation>
<!-- 添加编译配置 -->
</compilation>
</system.web>
</configuration>
- 在
节点下添加 节点,并设置其属性值为 App_Code。
<configuration>
<system.web>
<compilation>
<codeSubDirectories>
<add directoryName="App_Code" />
</codeSubDirectories>
</compilation>
</system.web>
</configuration>
方法二:在 Visual Studio 中添加 App_Code 类库项目
我们可以在 Visual Studio 中添加一个 App_Code 类库项目,然后把公共的类、控件或者数据访问层的代码放在这个项目中。这种方法的优点是简单易行,缺点是增加了一个项目,会增加项目之间的耦合度。
示例:
下面是一个简单的示例,我们将一个名为 MyHelpers.cs 的辅助类文件放在 App_Code 文件夹下。
namespace MyApp
{
public static class MyHelpers
{
public static string ToUpper(this string str)
{
return str.ToUpper();
}
}
}
如果不进行任何配置,则在代码中调用 MyHelpers.ToUpper() 方法时会报错。我们可以按照上文所述的两种方法之一进行配置,然后重新编译项目,问题应该就会得到解决。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# web应用程序不能访问app_code下类的原因以及解决方法 - Python技术站