“Linq”类型或命名空间在“System”命名空间中不存在。

26

我有一个WCF服务托管在IIS的网站上,似乎出现了这个问题。 在我的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;

3
请贴出发生错误的代码。 - Jesse C. Slicer
FYI,通常使用网站“项目”来进行WCF服务(或除相当简单的网站之外的任何内容)是一个不好的想法。 - John Saunders
其实,这是一个相当简单的网站 :) - gigi
5
网站不是项目。它们独特的地方在于它们并不像其他 Visual Studio “项目”类型那样构建。它们有许多独特的问题,包括命名空间识别出现的奇怪问题。如果您必须使用网站“项目”来实现您的实际网站,则至少要对服务使用 Web 应用程序项目。这么做会让您感到高兴。 - John Saunders
1
不要将您的答案编辑到问题中。请将其作为答案发布并接受它。 - CodesInChaos
显示剩余3条评论
10个回答

20
解决方案:看起来应该是以下的Web配置:

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

你还需要添加 using System.Linq - Huseyin Yagli
我发现我的 web.config 文件中有两个 <system.web> 标签,删除其中一个就解决了问题。 - ldam
@HüseyinYağlı他确实有“using System.Linq”。那就是错误所在。 - Ian Boyd

4
你的网站中是否有一个代码文件,其中包含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
@gigi 是的,这个问题很奇怪。它最初是一个3.5项目还是其他什么?并且,为了澄清一下:它是一个网站项目还是Web应用程序项目? - pseudocoder
删除 System.Core 并没有起到帮助作用,因为这是一个网站,应用程序中的所有项目都是在 .net 4.0 中开发的(所有项目都始于 .net 4.0)。 - gigi
@gigi 我建议你在代码文件中删除导入行。它本来就不必要。 - pseudocoder

3
有时候,它只是为了好玩而“消失”。如果你不需要它,就把它删除掉。
否则,在解决方案资源管理器中右键单击你的网站,然后添加一个引用。

2

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

using System.Linq;

这个解决方案对我很有帮助。也许将来会帮到其他人...


谢谢。事实证明,当编译错误时,“ctrl + .”时,Visual Studio自己找不到这个命名空间,太蠢了。 - Jérôme MEVEL

1

另一个需要检查的是您的.csproj文件,特别是以下项目:

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

如果您没有指定配置文件的文件夹,您可能需要手动更改为您拥有的文件夹。您也可以从https://www.microsoft.com/net/download/visual-studio-sdks下载目标文件。
不幸的是,我的同事在旧版PCL项目(基于配置文件的PCL)中遇到了这个问题,所以他无法下载.NET Portable目标文件,但我必须给他提供来自我的功能文件夹(C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETPortable\v4.0\Profile\Profile47)的DLL文件。

1
我通过在 Views\Shared\Web.config 文件中添加 System.Linq 命名空间来解决了这个问题,例如,在倒数第二个位置上方的 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>

0
问题在于你没有添加

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

在编译标签中。

0
对我来说解决方案是:
  1. 转到:工具 > Nuget 包管理器 > 管理解决方案的 NuGet 包

  2. 安装 System.Linq 包。


0

我遇到了同样的错误,但我的 Web 应用程序运行在框架 v2.0 上。将我的应用程序池从 v2.0 更改为 v4.0。一切正常...愉快的日子


你有这方面的链接或参考资料吗? - Lizz

0

删除隐藏的.vs文件夹并重新启动Visual Studio,这对我有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接