【问题标题】:ASP.NET compiler can't find any namespaceASP.NET 编译器找不到任何命名空间
【发布时间】:2013-07-04 00:23:35
【问题描述】:

我有一个foo.cs 文件

namespace LoL
{
    public class testing2
    {

    }
}

Default.aspx.cs文件:

更新:我不知道它是否真的有帮助,但这里是所有Default.aspx.cs 文件:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using LoL;

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

        }
    }
}

我得到:

编译器错误消息:CS0246:类型或命名空间名称“LoL” 找不到(您是否缺少 using 指令或程序集 参考?)

对于我尝试使用的任何课程。不仅仅是图书馆。我在VS上尝试了几种移动/复制文件的解决方案:Porject > add existing file > foo.cs etc

但其中任何一个都没有运气。

如何解决这个问题?我不知道如何解决这个问题。

注意:如果我尝试在 VS 中使用 F5 模式,它可以工作,但是将网站放在 C:\inetpub\wwwroot\ 上会像在主机中一样给出此错误。

编辑: 通过 ASP.NET 页面上的错误消息,我可以看到 IIS 正在调用 C# 编译器 4.0,但我的目标是 VS 08 上的 .NET framework 3.5(最后一个版本可用VS 08)。这和我的问题有关系吗?

EDIT2:我能够成功地从命令行编译我的网站项目。在项目路径上使用msbuild 程序。当 IIS 尝试编译它时,它只是不起作用。 IIS 不知道foo.cs 文件。

EDIT3:现在我正在使用aspnet_compiler(in cmd.exe) 程序:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler -v webApplication4

在路径上:C:\inetpub\wwwroot\webApplication4

我遇到了同样的错误。所以,我查看了 Visual Studio 配置的东西,它是 .csproj 文件,我正在寻找编译器传递的包含文件(由 VS 生成)。

我在ItemGroup 标签上找到了它们:

  <ItemGroup>
    <Compile Include="foo.cs" />
    <Compile Include="Default.aspx.cs">

如您所见,foo.cs 包含在内以进行编译。所以,文件在那里。为什么aspnet编译器找不到命名空间?

【问题讨论】:

  • 您已经说过它可以在本地工作,那么当您部署到 Web 服务器时,您使用的是什么版本的 IIS?您正在为此创建一个新网站吗?您能否尝试提供有关您的部署环境的更多详细信息?谢谢。
  • 把网站放到inetpub目录下,是复制源码,还是先发布?由于它在本地工作,因此您编译的代码文件似乎没有进入网络服务器。
  • 我说它可以通过在 VS 中使用 F5 模式来工作...我使用的是 IIS 7,VS 将目标 .NET 设置为 3.5。你想要什么细节?我对这些东西了解不多,因为我不是网络开发人员,我是桌面开发人员,正在尝试编辑一些页面。
  • 您可能需要更改 IIS 应用程序池以使用 .NET Framework 2.0...3.5 是 2.0 的扩展。 [有时] 尝试在 4.0 中运行 2.0/3.5 站点时会遇到配置问题。
  • @AuriRahimzadeh:我已经试过了。

标签: c# asp.net visual-studio-2008 namespaces


【解决方案1】:

LoL 与您的网站在不同的项目中吗?如果是这样,您需要在您的网站项目中添加对该项目的引用。在网站中,右键单击 References 文件夹,然后单击“添加引用”并再次尝试构建。

如果这不起作用,您的 LoL 项目可能未设置为构建。在构建输出中验证它正在成功构建。如果不是,您需要查看您的构建配置并验证您当前的活动配置是否设置为构建。

【讨论】:

  • 没有什么不同,我是在同一个解决方案中创建的。 “项目可能未设置为构建。”你的意思是“建设行动”?它设置为“编译”。
  • 嗯。在那种情况下......看看达林的答案。
【解决方案2】:

如果您创建的是网站而不是 webApplication,您需要将 .cs 文件放在特殊的 ~/App_Code 文件夹中并将它们部署到服务器上。请阅读 MSDN 上的网站和预编译 Web 应用程序之间的区别:http://msdn.microsoft.com/en-us/library/dd547590.aspx

【讨论】:

  • 一个 Web 应用程序是预编译的,您可以将源文件放在项目中您想要的任何位置。它们将被编译,您不需要部署它们,只需要二进制文件。但如果这个 .cs 文件在同一个 Web 应用程序中,它应该可以正常工作。
  • 即使在 VS 中从头开始创建的新项目中,这对我也不起作用。我不知道该怎么办。
【解决方案3】:

尝试使用 gacutil.exe 在 GAC 中复制已编译的类库。打开 VS 命令提示符然后输入:

gacutil.exe -i "程序集路径.dll"

【讨论】:

  • 这是个糟糕的主意。你不想仅仅因为你遇到了一个简单的编译问题就在 GAC 中注册类 :)
  • @AuriRahimzadeh 我没有看到这样做的问题,我一直在处理的大多数 Web 应用程序总是在 GAC 中注册它们的代码。为什么这是一种糟糕的做法?
  • @Jack 是的,Visual Studio 工具 => Visual Studio 命令提示符
【解决方案4】:

@Machinegon 因为部署和管理目的。除非它是多个站点在服务器上使用的类,否则没有理由将网站的 DLL 部署到 GAC。即使被多个站点使用,最好将站点已知兼容的版本放在其 bin 文件夹中,否则注册新版本可能会破坏其他站点/应用程序。

【讨论】:

    【解决方案5】:

    我知道这是一个旧线程,但这是一个常见问题。请注意以下事项。 您的网站中不能有多个 bin 目录。 bin 目录必须位于您网站的根文件夹中。您不能拥有包含 bin 目录的子目录。很多时候人们会在 Visual Studio 中使用一个新项目创建一个网页,然后他们会将该网页发布到他们网站的子目录中。当网页发布时,一个新的 bin 文件夹将放置在该子目录中。该 bin 目录是无用的,不会被任何东西引用。子文件夹中的网页将尝试在位于网站根目录的 bin 目录中查找任何依赖项。 这很可能是由服务提供商设置的,或者它可能只是 IIS/ASP.net 的默认行为。无论如何,当您发布网站时,您必须发布整个网站。这意味着一切。发布过程必须包括从根目录开始的所有内容。如果您将依赖项添加到位于子文件夹中的网页,则必须将依赖项添加到网站,即根文件夹中的整个网站。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      • 1970-01-01
      • 2015-09-04
      • 2013-07-07
      • 1970-01-01
      • 2013-03-25
      相关资源
      最近更新 更多