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


71

我正在使用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 Startup类,所以我只添加了一个普通类并包含了所有需要的引用。我可以知道我在哪里犯错

Answers:


145

尝试使用Package Manage Console并执行

Update-Package Owin -Reinstall

2
用户建议进行编辑以删除-Reinstall标志。可能值得解释这种区别。-Reinstall标志将使NuGet重新应用您已经安装的相同版本的软件包。这就像修复操作。通常,它已经在packages文件夹中,不需要下载。如果没有此标志,则该操作会将软件包更新为最新版本,但前提是存在较新版本。同样,这可能会影响依赖它的其他程序包。如果您已经安装了最新版本,那么我认为这不会做任何事情。
scottt732'4

我遇到过同样的问题。我通过nuget升级到了SignalR / Owin的最新版本。IAppBuilder尚未解决。我已按规定的方法进行了纠正,但错误消失了。但是,它拉低了Owin 1.0。我们不应该在这里使用最新的和最好的吗?
JohnB 2014年

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 2014年

26

我有类似的问题。但是相反,是Owin引起了Microsoft.Owin的问题

Update-Package Owin -Reinstall

没有工作,也没有 Update-Package Owin

Install-Package Microsoft.Owin

确实对我来说很好,谢谢。


1
感谢您MrИвоНедев
Rejwanul格子窗

1
我都做过这两个,但红色的波浪形不会消失。然后,我关闭解决方案并重新打开它,红色的波浪状消失了。= /
Christopher D. Emerson

8

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

使用Owin;

并重建。您的项目将对此进行处理。

我不知道为什么VS没有做到这一点,但事实并非如此。一旦将此引用添加到我的项目中,一切就都准备就绪。


3

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

  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因为它已存在于packages文件夹中。滚回来...

  1. 转到您的项目文件夹并查找软件包
  2. 找到有问题的包,即 Microsoft.Web.Infrastructure
  3. 删除资料夹
  4. 从第7步继续

备择方案

这是我已阅读的解决此类问题的替代方法。

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

祝好运。


2

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

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

重新启动Visual Studio 2013可以节省一天的时间,原因是无法解释的。


我需要彻底重启
将于

1

我以下在F#中使用的等效项提出了隐藏IAppBuilder的问题。事实证明,即使引用了提供Owin名称空间的Owin.dll,Owin规定也被解释为不完整的System.Web.Http.Owin引用。

open System.Net.Http
open System.Web.Http
open Microsoft.Owin
open Owin

通过如下重新布置用法来解决该问题:

open Microsoft.Owin
open Owin
open System.Net.Http
open System.Web.Http

...当然,这可能是F#编译器特有的错误,并且在C#和其他地方更好地解决了名称冲突。


0

就我而言,我在项目文件夹和vs解决方案文件(.sln)的位置之间移动。完成重新添加项目的操作后,在解决方案级别上有一个程序包文件夹,其中一个保留在项目子文件夹中。这样,在该项目中,.csproj文件中的相对软件包文件夹链接被弄乱了。

重新安装或有关该线程中nuget软件包管理器的其他技巧很有帮助。我注意到,在重新安装了几个软件包之后,在git源代码diff中,csproj文件中的packages文件夹的路径已更改。

之前

<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。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.