【问题标题】:Classes in Subfolder in C#.Net Visual Studio project not seen by code behind filesC#.Net Visual Studio 项目的子文件夹中的类在文件隐藏代码中看不到
【发布时间】:2015-02-23 21:47:34
【问题描述】:

我有一组用于 Web 应用程序的 C# 文件,这些文件是从一个已不在身边的开发人员那里继承而来的。我在 Visual Studio 2010 中创建了一个解决方案,并将现有文件和子文件夹从源代码管理添加到解决方案中。我创建的其中一个子文件夹称为 App_Code,它模仿了我们的源代码控制程序中存在的一个子文件夹。在这个子文件夹中有一些 C# 类。这些类在根目录的代码隐藏文件(例如 ActionPage.aspx.cs: )中被引用,但没有任何代码隐藏文件可以在 App_Code 中找到这些类。我收到通常的错误消息,“找不到类型或命名空间 'ErrorLogger' [其中一个类](您是否缺少指令或程序集引用?)” App_Code 子文件夹看起来不像常规文件夹。我正在附上一个显示它的样子的剪辑:

我怀疑这是一个特殊的 Visual Studio 文件夹名称。这是 ActionPage 中调用 ErrorLogger 的代码示例(并给出上面列出的错误消息):

ErrorLogger Err = new ErrorLogger();

ErrorLogger 类如下所示:

using System;
using System.IO;
using System.Text;

public class ErrorLogger
{

public void Logger(string sPathName, string sErrMsg)
{
    //- <--custom date time stamp & format for easy reading
    string sLogFormat = DateTime.Now.ToShortDateString().ToString() + " " + DateTime.Now.ToLongTimeString().ToString() + " ==> ";
    string sYear = DateTime.Now.Year.ToString();
    string sMonth = DateTime.Now.Month.ToString();
    string sDay = DateTime.Now.Day.ToString();
    //string sErrorTime = sYear+sMonth+sDay;
    string sErrorTime = sMonth + sDay + sYear;
    //- <--Write error to a file
    StreamWriter sw = new StreamWriter(sPathName + sErrorTime, true);
    sw.WriteLine("------------------------------------------------------------------------------------------------");
    sw.WriteLine(sLogFormat + sErrMsg);
    sw.Flush();
    sw.Close();
}

}

我错过了什么?

2015 年 2 月 24 日添加:我发现了一个不太令人满意的解决方案:我创建了一个新的 VS 2010 解决方案,然后选择了文件->添加->现有网站。我现在将代码放在网站而不是 Web 应用程序中,但它确实可以编译和运行。没有重新构建整个事情,我认为这是我能做的最好的 - 除非有人有任何其他建议......而且我非常感谢所有建议,伙计们,相信我。在一个相关主题上,为什么 File->New->Project from Existing Code 没有给我 Web 应用程序的选项?雷德蒙德,如果你在听,请添加!

【问题讨论】:

  • 类在哪些命名空间中?您看不到它们的原因很可能是命名空间问题。
  • 如果您不熟悉如何查找命名空间或默认命名空间然后右键单击项目中的AAT并选择属性查看
  • 看起来你的类没有命名空间,所以它只能被项目中没有命名空间声明的其他类访问。​​
  • 您是否尝试过对解决方案进行清理/构建?
  • 你不需要“需要”命名空间来让你的应用程序工作,它只是更好地工作。您提到您创建了 App_Code 目录。使用旧版本的 Visual Studio 有时会出现问题。您是否尝试过将课程移至基层以查看它是否在那里工作?

标签: c# asp.net visual-studio-2010


【解决方案1】:

从项目中删除文件。

右键单击项目并选择“添加新项目...”

选择 Class 并将新类命名为 ErrorLogger。

粘贴现有代码。

【讨论】:

  • 不,不快乐。我被难住了。
  • 您说您创建了一个新项目,但随后从源代码管理中添加了文件。那可能弄乱了项目文件。我会尝试创建一个新项目,然后在不使用源代码管理的情况下复制文件。
  • 史蒂夫,我已经按照您的建议完成了,方法是将源代码管理中的文件检出到与我的解决方案文件所在的不同文件夹中,然后使用 Windows 资源管理器复制应用程序文件,选择显示所有文件并然后包括项目中的文件。在进行复制之前,我删除了所有特定于源代码管理的文件。但我仍然无法编译。但是,今天将 ErrorLogger 移至根目录确实有效,因此解决了,但我也注意到文件后面的代码没有看到相应 aspx 文件中的控件。 ??
  • 我刚刚意识到 - 没有设计器文件,所以这就是问题所在。致力于重建它们。这真的不应该这么难。但是感谢您的所有帮助。
  • 感谢您告诉我们。
【解决方案2】:

我刚刚找到this link;我认为它解释了我所看到的行为。看来这最初是一个网站项目,而不是一个 Web 应用程序。无论如何,正如我在上面的评论中指出的那样,我能够将类文件从 App_Code 文件夹移动到根目录并且它们编译得很好。感谢大家的帮助!

【讨论】:

    【解决方案3】:

    添加

    using ErrorLogger; 
    

    在您的页面中引用。

    【讨论】:

    • 我试过了,但是 using 语句给了我相同的“类型或命名空间...”错误消息。
    【解决方案4】:

    将文件夹添加到实现文件顶部的 using 指令中,如下所示:

    using AAT.App_Code;
    

    【讨论】:

    • 当我尝试这样做时,该行的 App_Code 部分给了我相同的“类型或命名空间......”错误消息。
    • @Melanie 那是因为你似乎没有使用namespace 提供的两个答案都不能解决你的问题..
    【解决方案5】:

    当您添加文件夹名称 App_Code 时,Visual Studio 将区别对待此文件夹中的类。类属性的构建动作设置为“内容”。您需要单击该属性将其更改为“编译”。

    【讨论】:

      猜你喜欢
      • 2017-04-10
      • 2018-11-01
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多