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

时间:2014-02-12 19:44:30

标签: c# asp.net-mvc-4 signalr owin

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

9 个答案:

答案 0 :(得分:126)

尝试使用Package Manage Console并执行

Update-Package Owin -Reinstall

答案 1 :(得分:20)

我遇到了类似的问题。但相反,Owin问题导致了Microsoft.Owin,显然是

Update-Package Owin -Reinstall

没有工作,Update-Package Owin

也没有

BUT

Install-Package Microsoft.Owin

对我来说没问题,谢谢。

答案 2 :(得分:7)

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

  

使用Owin;

重建。你的项目会选择它。

我不知道为什么VS没有选择这个,但它没有。一旦我将这个引用添加到我的项目中,那么一切都已落实到位。

答案 3 :(得分:3)

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

  1. 转到Solution Explorer并查找您的项目
  2. 在您的项目下,展开References;您应该看到有问题的参考
  3. 的警告
  4. 右键点击References并打开Manage NuGet Packages
  5. 搜索有问题的参考名称,即Microsoft.Owin;加载后显示它已经安装(它是,但它安装不正确。检查属性>版本在步骤2显示0.0.0.0
  6. 检查Force uninstall, even if there are dependencies on it
  7. 卸载
  8. 安装
  9. 构建并运行项目
  10. 问题

      

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

    1. 转到项目文件夹并查找包
    2. 找到有问题的包,即Microsoft.Web.Infrastructure
    3. 删除文件夹
    4. 从步骤7恢复
    5. 替代

      以下是我已解读的解决此类问题的替代方案。

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

答案 4 :(得分:2)

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

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

由于某些无法解释的原因,重新启动Visual Studio 2013节省了一天。

答案 5 :(得分:1)

我在F#中使用的等价物存在隐藏IAppBuilder的问题。事实证明,Owin规定被解释为一个不完整的System.Web.Http.Owin引用,即使引用了提供Owin命名空间的Owin.dll。

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#编译器特有的bug,并且在C#和其他地方可以更好地处理名称冲突。

答案 6 :(得分:0)

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

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

之前

<?php // show welcome back message if coming from the waiting list email
$name = '';
if (isset($_GET["name"]))
{
$fullname = $_GET["name"];
}
?>

之后

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

因此,如果您遇到同一问题,并且有很多nuget包,则关闭整个解决方案可能会更容易,在类似vscode的文本编辑器中打开csproj文件,并使用搜索并替换。然后只需保存,关闭,重新打开VS中的解决方案并还原nuget包即可。这应该够了吧。 (无论如何,如果没有获得正确的软件包,则应在项目级别删除本地软件包文件夹,以使项目真正失败。)

答案 7 :(得分:0)

这是一个订购问题。

using Microsoft.Owin;
using Owin;

首先要定义Microsoft.Owin,然后在已经导入的Microsoft名称空间下找到Owin。如果将鼠标悬停在使用Owin的Owin上,您应该会看到它已解决为Microsoft。Owin再一次出现,此外,IDE将使用Owin作为未使用的冗余引用而变灰。

要做:

using global::Owin;

这说明编译器不要在已定义的名称空间(例如Microsoft。名称空间)下寻找Owin。

答案 8 :(得分:-1)

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

检查您正在使用的视觉工作室 您可以找到以下评论

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

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