我在ASP中创建了一个网站。NET,并创建了一个类,并把它放在App_Code文件夹中。然而,我不能从我的其他页面访问这。是否需要配置一些东西来允许这一点?我在以前的项目中已经使它工作,但在这个项目中,不知何故。
namespace CLIck10.App_Code
{
public static class Glob
{
...
}
}
我在ASP中创建了一个网站。NET,并创建了一个类,并把它放在App_Code文件夹中。然而,我不能从我的其他页面访问这。是否需要配置一些东西来允许这一点?我在以前的项目中已经使它工作,但在这个项目中,不知何故。
namespace CLIck10.App_Code
{
public static class Glob
{
...
}
}
把它放在你想要访问类的其他文件的顶部:
using CLIck10.App_Code;
或者像这样从其他文件访问类:
CLIck10.App_Code.Glob
不确定这是否是你的问题,但如果你是c#的新手,那么这是一个很容易被绊倒的问题。
更新:我最近发现,如果我在项目中添加了一个App_Code文件夹,那么我必须关闭/重新打开Visual Studio才能正确识别这个“特殊”文件夹。
转到要从其中访问App_code类的页面,然后添加App_code类的名称空间。您需要提供一个using语句,如下所示:
using WebApplication3.App_Code;
之后,你需要转到app_code类属性,并将“Build Action”设置为“Compile”。
我发现将文件移动到一个单独的Class Library项目中,然后在web项目中引用该项目,并在文件的using部分应用名称空间更容易。 出于某种原因,其他的解决方案都不适合我,但这个解决方案却适合我。
我还没有弄清楚为什么会发生这种情况,但我在我的App_Code文件夹中有类,它们在彼此中调用方法,并且在我构建. net 4.5.2项目时可以这样做,但后来我不得不将其恢复到4.0,因为目标服务器没有升级。那就是当我发现这个问题(在我的网页上修复了langversion后)。Config from 6 to 5…另一个故事)…
我的一个方法一直有这样的错误:
The type X.Y conflicts with the imported type X.Y in MyProject.DLL
我的所有类都已经在它们的属性中设置为“Compile”,正如这里接受的答案所建议的那样,每个类都有一个相同的公共名称空间,并且每个类都使用MyNamespace;在每门课的第一名。
我发现,如果我只是将必须调用彼此方法的违规类移动到另一个标准文件夹中,命名为“App_Code”以外的东西,它们就不会有这种冲突问题。
注意:如果你创建了一个名为“AppCode”的标准文件夹,将你的类移动到其中,删除“App_Code”文件夹,然后将“AppCode”重命名为“App_Code”,你的问题就会回来。不管你是使用“新建文件夹”还是“添加ASP . net文件夹”选项来创建“App_Code”,它似乎是在名称上输入的。
也许这只是一个。net 4.0(或者更早的版本)的问题…在不得不恢复之前,我在4.5.2中很好!
在我的例子中,我无法使用App_Code文件夹中定义的类来构建项目。
无法精确地复制评论的场景,但不得不关闭和重新开放视觉工作室,以配合智能感知同意…
我注意到,当App_Code文件夹中的一个类被设置为“Compile”而不是“Content”(右键单击它)时,错误来自类的第二个版本……查看代码窗格和选项卡之间的3个字段中的3个字段的最左边。“另一个”被称为10_App_Code或类似的东西。
为了纠正这个问题,我将文件夹从App_Code重命名为Code,显式地在类上设置名称空间,并将所有类设置为“Compile”
我想补充一个为什么会发生在我身上的答案,我只是使用了一个新版本的Visual Studio来添加到一个旧的项目中,并使用了“添加Web表单”。我在App_Code中有一个类,由于某种原因,它仅在那组页面上不可访问。我尝试将类更改为“Compile”,突然项目的其余部分抱怨类在多个地方,但它不是(在开始时也有一个数字,如3_Whatever)。
我卸载了项目文件,并手动编辑它,发现即使属性窗口显示“内容”,指令是“编译”。此外,它还没有添加其他所有类型的子类型。最后,aspx页面有“CodeBehind”而不是“CodeFile”,我也做了修改,不确定是否需要,但至少现在看起来和其他页面一样了!
<Content Include="MyFile.aspx.cs">
<DependentUpon>MyFile.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Content>
现在一切都正常了。