找不到类型或命名空间IAppBuilder(缺少使用指令或程序集引用)

76

我正在开发一个Asp.Net MVC 4应用程序,其中使用了SignalR 2.0.1,并使用Owin Startup类进行映射,一开始它能够正常工作。

突然间,当我试图重建我的应用程序时,它显示找不到类型或命名空间为IAppbuilder的错误信息。

以下是我的启动类:

using Microsoft.Owin;
using Owin;
using WhiteBoardApp;

namespace WhiteBoardApp
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();
        }
    }
}

我也安装了Owin包,但由于某些原因我找不到Owin的启动类,所以我只是添加了一个普通的类并包含了所有需要的引用。请问我做错了什么吗?

9个回答

157

尝试使用包管理器控制台,并执行

Update-Package Owin -Reinstall

2
一个用户建议编辑以删除-Reinstall标志。可能值得解释一下区别。-Reinstall标志将导致NuGet重新应用您已安装的相同版本的软件包。这就像修复操作。通常它已经在packages文件夹中,不需要下载。如果没有此标志,则操作将更新软件包到最新版本,但仅当有更新版本时。此外,这可能会影响其他依赖于它的软件包。如果您已经安装了最新版本,则我认为这不会有任何作用。 - scottt732
我曾经遇到过同样的问题。我通过nuget升级到了最新版本的SignalR/Owin,但是IAppBuilder没有被解析出来。我按照建议的方法进行了处理,错误已经消失了。但是...它却下载了Owin 1.0。我们难道不应该在这里使用最新和最好的版本吗? - JohnB
Owin包基本上包含在OWIN规范中定义的接口。从owin.org和nuget.org上可以看出,它仍处于1.0版本。Microsoft.Owin包是Microsoft对OWIN规范的实现。它即将升级到v3.0,但仍依赖于Owin 1.0。使用Update-Package Owin -Reinstall命令会导致Owin及其依赖项的任何包被重新安装。SignalR和WebAPI间接依赖于Microsoft.Owin和Owin。当此命令再次使您的构建正常工作后,请随意更新任何包。 - scottt732

29

我遇到了类似的问题。但问题不是由Owin引起的,而是显然引起Microsoft.Owin的问题。

Update-Package Owin -Reinstall
< p>不起作用,Update-Package Owin 也不起作用。

< p>但是

Install-Package Microsoft.Owin

对我来说运行良好,谢谢。


1
谢谢您,MrИво Недев。 - Rejwanul Reja
1
我尝试了这两种方法,但是红色的波浪线还是没消失。然后我关闭了解决方案并重新打开它,这样红色的波浪线就不见了。 =/ - Christopher

9

IAppBuilder接口位于Owin包下。只需在您的类文件中添加引用:

using Owin;

然后重新构建,您的项目将会使用这个接口。

我不知道为什么VS没有自动添加这个引用,但它确实没有。一旦我将此引用添加到我的项目中,一切就都顺利了。


6

在构建项目时,我遇到了同样的问题。以下是帮助解决我的问题的步骤:

  1. 进入 Solution Explorer 并查找您的项目
  2. 在您的项目下,展开 References;您应该会看到有关有问题引用的警告
  3. 右键单击 References 并打开 Manage NuGet Packages
  4. 搜索有问题的引用名称,例如 Microsoft.Owin;加载后显示它已经安装(实际上是安装不正确。在第2步检查属性>版本时显示为 0.0.0.0
  5. 选中 Force uninstall, even if there are dependencies on it
  6. 卸载
  7. 安装
  8. 构建并运行项目

问题

无法安装 Microsoft.Web.Infrastructure,因为它已存在于包文件夹中。正在回滚...

  1. 进入您的项目文件夹并查找 packages 文件夹
  2. 找到有问题的包,例如 Microsoft.Web.Infrastructure
  3. 删除该文件夹
  4. 从第7步继续

替代方案

这里是我读到的解决此类问题的替代方案。

  • 清理并重新构建项目/解决方案
  • 重启 Visual Studio
  • 重启电脑

祝好运。


1
重新启动电脑解决了我的问题 ‍♂️ - Sayed Abolfazl Fatemi

2

由于某种原因,我的Visual Studio 2013没有意识到引用路径的存在。所有添加的包前面都显示了黄色感叹号。我检查了../packages/,但所有文件都存在,我还打开了引用正确路径的.csproj文件。

关闭并重新打开解决方案会返回很多错误,并且无法加载解决方案中包含的项目。

出于不明原因,重新启动Visual Studio 2013解决了问题。


我需要完全重启。 - will webster

1
我的F#代码中使用的下面这段代码在隐藏IAppBuilder方面遇到了问题。结果发现,尽管已经引用了提供Owin命名空间的Owin.dll文件,但Owin规范仍被解释为不完整的System.Web.Http.Owin引用。
open System.Net.Http
open System.Web.Http
open Microsoft.Owin
open Owin

问题通过重新排列以下using语句解决:
open Microsoft.Owin
open Owin
open System.Net.Http
open System.Web.Http

尽管如此,这可能是F#编译器特有的bug,并且名称冲突在C#和其他地方处理得更好。


0
在我的情况下,我移动了项目文件夹和vs解决方案文件(.sln)的位置。一旦我完成重新添加项目,解决方案级别上就会有一个packages文件夹,而一个则留在项目子文件夹中。这样,在那个项目中,.csproj文件中的相对包文件夹链接就会出现问题。
本主题中关于nuget包管理器的重新安装或其他提示非常有帮助。我注意到,在重新安装了一些包之后,在我的git源代码差异中,csproj文件中的包文件夹路径发生了变化。 之前
<HintPath>packages\Microsoft.Owin.4.0.1\lib\net45\Microsoft.Owin.dll</HintPath>

之后

<HintPath>..\packages\Microsoft.Owin.4.0.1\lib\net45\Microsoft.Owin.dll</HintPath>

所以,如果你遇到了同样的问题并且有很多NuGet包,关闭整个解决方案,在类似VSCode这样的文本编辑器中打开csproj文件,并使用搜索和替换修复相对链接可能更容易。然后保存,关闭,在VS中重新打开解决方案并还原NuGet包。那应该就没问题了。(在任何情况下,您都应该删除项目级别上的本地包文件夹,这样如果它没有获取正确的包,项目就会真正失败。)

0

这是一个排序问题。

using Microsoft.Owin;
using Owin;

首先需要定义Microsoft.Owin,然后在已经导入的Microsoft命名空间下找到Owin。如果你将鼠标悬停在使用Owin的Owin上,你应该会看到它再次被解析为Microsoft.Owin,此外IDE还会将使用Owin作为冗余未使用的引用灰显。

操作:

using global::Owin;

这明确告诉编译器不要在已定义的命名空间(例如 Microsoft. 命名空间)下查找 Owin。


-1

http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr

检查您正在使用的Visual Studio版本 您可以找到以下注释

注意:如果您正在使用Visual Studio 2012,则SignalR Hub Class(v2)模板将不可用。您可以添加一个名为ChatHub的普通类。

另外 注意:如果您正在使用Visual Studio 2012,则OWIN Startup Class模板将不可用。您可以添加一个名为Startup的普通类。


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