【问题标题】:The type or namespace name 'Linq' does not exist in the namespace 'System'命名空间“System”中不存在类型或命名空间名称“Linq”
【发布时间】:2012-02-22 15:19:23
【问题描述】:

我有一个托管在 IIS 网站中的 wcf 服务,我似乎遇到了这个问题。 在我的 web.config 我有这个:

<system.web>
        <compilation>
            <assemblies>
                <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
                <add assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                <add assembly="System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/></assemblies>
        </compilation>
    </system.web>

解决方案目标框架4.0中的所有项目。

LE:当我尝试导入 System.Linq 时出现错误;

 using System.Linq;

【问题讨论】:

  • 请贴出发生错误的代码。
  • 仅供参考,将网站“项目”用于 WCF 服务(或任何非相当简单的网站)通常是个坏主意。
  • 其实,这是一个相当简单的网站:)
  • 网站不是项目。它们的独特之处在于它们不构建。它们有许多其他 Visual Studio“项目”类型所没有的独特问题,包括命名空间识别发生的奇怪事情。如果您必须为您的实际站点使用一个网站“项目”,那么至少为您的服务使用一个 Web 应用程序项目。你会很高兴你做到了。
  • 不要在问题中编辑您的答案。将其作为答案发布并接受。

标签: asp.net .net wcf


【解决方案1】:

删除隐藏的 .vs 文件夹并重新启动 Visual Studio 为我修复了它。

【讨论】:

    【解决方案2】:

    我的解决方案是:

    1. 转到:工具 > Nuget 包管理器 > 管理解决方案的 NuGet 包

    2. 安装 System.Linq 包。

    【讨论】:

      【解决方案3】:

      要检查的另一件事是您的 .csproj 文件,特别是这些项目:

      <TargetFrameworkProfile>Profile47</TargetFrameworkProfile>
      <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
      

      如果您没有指定配置文件的文件夹,您可能需要手动将其更改为您拥有的文件夹。您还可以从https://www.microsoft.com/net/download/visual-studio-sdks 下载目标。

      不幸的是,我的同事在旧式 PCL 项目 (profile-based PCL) 中遇到了这种情况,因此他无法下载 .NET Portable 目标,但我不得不将 DLL 提供给他,使其无法正常运行文件夹(C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETPortable\v4.0\Profile\Profile47)。

      【讨论】:

        【解决方案4】:

        我通过将System.Linq 命名空间添加到Views\Shared\Web.config 文件中的命名空间来解决了这个问题,例如,如下所示,从底部倒数第二个,在WebApplication1 命名空间之上。

        请注意,这是在 Views 文件夹中的 Web.config 中,而不是网站的主“Web.config”。

        <system.web.webPages.razor>
            <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <pages pageBaseType="System.Web.Mvc.WebViewPage">
                <namespaces>
                    <add namespace="System.Web.Mvc" />
                    <add namespace="System.Web.Mvc.Ajax" />
                    <add namespace="System.Web.Mvc.Html" />
                    <add namespace="System.Web.Optimization"/>
                    <add namespace="System.Web.Routing" />
                    <add namespace="System.Linq" />
                    <add namespace="WebApplication1" />
                </namespaces>
            </pages>
        </system.web.webPages.razor>
        

        【讨论】:

          【解决方案5】:

          我的控制器上没有 Linq 方法(Count、Where、toList 等...)。添加命名空间:

          using System.Linq;
          

          为我解决了这个问题。也许将来会帮助某人...

          【讨论】:

          • 谢谢。事实证明,当“ctrl +”时,Visual Studio 太笨了,无法自己找到这个命名空间。关于编译错误。
          【解决方案6】:

          问题是你没有添加

          debug="true|false" targetFramework="4.0"
          

          在编译标签中。

          【讨论】:

            【解决方案7】:

            我遇到了同样的错误,但我的 Web 应用程序在框架 v2.0 上运行。将我的应用程序池从 v2.0 更改为 v4.0。所有的工作......快乐的日子

            【讨论】:

            • 你有这个链接或参考吗?
            【解决方案8】:

            解决方案:似乎网络配置应该是:

            <system.web>
                <compilation debug="true" targetFramework="4.0"/>
            </system.web>
            

            【讨论】:

            • 你还需要加using System.Linq
            • 我发现我的 web.config 中有 2 个 &lt;system.web&gt; 标签,删除其中一个就可以了。
            • @HüseyinYağlı 他确实有using System.Linq。那是错误。
            【解决方案9】:

            您的站点中是否有带有Imports System.Linq (VB) 或using System.Linq; (c#) 的代码文件?

            似乎最简单的答案是这是一个错字。也许命名空间应该更正为System.Data.Linq

            编辑: System.Linq 应该是一个有效的命名空间,因为它“提供支持使用语言集成查询 (LINQ) 的查询的类和接口”。 (http://msdn.microsoft.com/en-us/library/system.linq.aspx)。系统级web.config中也默认导入。

            所以,如果它与我上面的建议无关,不确定这里发生了什么。也许您的 machine.config 或系统级 web.config 有问题?

            编辑 2: 我觉得你在这个级别添加 System.Core 程序集很奇怪。我相信这是包含 System.Linq 命名空间的程序集。也许删除它会有所帮助?

            编辑 3: System.Linq 默认导入到机器级别的 web.config 中。您可以在代码文件中删除该行。

            【讨论】:

            • System.Linq 是一个命名空间,但它在我引用的 System.Core.dll 程序集中,该死的,这很奇怪。
            • @gigi 是的,这很奇怪。这是从 3.5 项目开始的还是什么?而且,澄清一下:它是一个网站项目还是网络应用项目?
            • 删除 System.Core 没有帮助,它是一个网站,应用程序中的所有项目都是在 .net 4.0 中开发的(都在 .net 4.0 中开始)
            • @gigi 我建议删除代码文件中的导入行。无论如何都不需要。
            【解决方案10】:

            有时它只是为了好玩而“消失”。如果您不需要它,只需将其删除。

            或者在解决方案资源管理器中右键单击您的网站并添加对其的引用。

            【讨论】:

              猜你喜欢
              • 2016-10-08
              • 2021-12-18
              • 1970-01-01
              • 1970-01-01
              • 2015-12-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-06-19
              相关资源
              最近更新 更多