Der Typ oder Namespace IAppBuilder konnte nicht gefunden werden (fehlt mithilfe einer Direktive für eine Assemblyreferenz).

71

Ich arbeite an einer Asp.Net MVC 4-Anwendung, in der ich SignalR 2.0.1 verwende, und ich habe sie mit der Owin Startup-Klasse zugeordnet, und es hat zunächst einwandfrei funktioniert.

Als ich plötzlich versuchte, meine App neu zu IAppbuildererstellen, wurde darauf hingewiesen, dass der Typ-Namespace nicht gefunden werden konnte.

Es folgt meine Startklasse

using Microsoft.Owin;
using Owin;
using WhiteBoardApp;

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

Ich habe auch das OwinPaket installiert und konnte aus bestimmten Gründen die Owin Startup-Klasse nicht finden. Deshalb habe ich einfach eine normale Klasse hinzugefügt und alle erforderlichen Referenzen hinzugefügt. Darf ich wissen, wo ich einen Fehler mache?

Tu es
quelle

Antworten:

145

Versuchen Sie, die Package Manage Console zu verwenden, und tun Sie dies

Update-Package Owin -Reinstall
scottt732
quelle
2
Ein Benutzer schlug eine Bearbeitung vor, um das Flag -Reinstall zu entfernen. Es lohnt sich wahrscheinlich, den Unterschied zu erklären. Das Flag -Reinstall bewirkt, dass NuGet dieselbe Version des Pakets erneut anwendet, die Sie bereits installiert haben. Es ist wie eine Reparaturoperation. Im Allgemeinen befindet es sich bereits im Paketordner und muss nicht heruntergeladen werden. Ohne dieses Flag aktualisiert der Vorgang das Paket auf die neueste Version, jedoch nur, wenn eine neuere Version vorhanden ist. Dies kann sich auch auf andere Pakete auswirken, die davon abhängen. Wenn Sie bereits die neueste Version installiert haben, wird dies meiner Meinung nach nichts bewirken.
Scottt732
Ich hatte das gleiche Problem. Ich habe über Nuget auf die neueste Version von SignalR / Owin aktualisiert. IAppBuilder wurde nicht gelöst. Ich habe das vorgeschriebene Mittel angewendet und der Fehler ist verschwunden. ABER .., es zog Owin 1.0 herunter. Sollten wir hier nicht das Neueste und Beste verwenden?
JohnB
Das Owin-Paket enthält im Wesentlichen Schnittstellen, die in der OWIN-Spezifikation definiert sind, und soweit ich das beurteilen kann (von owin.org und nuget.org), ist es immer noch 1.0. Das Microsoft.Owin-Paket ist die Implementierung der OWIN-Spezifikation durch Microsoft. Es nähert sich v3.0, aber es hängt immer noch von Owin 1.0 ab. Der Befehl Update-Package Owin -Reinstall bewirkt, dass Owin und alle davon abhängigen Pakete neu installiert werden. SignalR und WebAPI hängen unabhängig von Microsoft.Owin und Owin ab. Nachdem dieser Befehl Ihre Builds wieder zum Laufen gebracht hat, können Sie alle Pakete aktualisieren.
Scottt732
26

Ich hatte ein ähnliches Problem. Aber stattdessen verursachte Owin offensichtlich ein Problem mit Microsoft.Owin

Update-Package Owin -Reinstall

Hat nicht funktioniert, auch nicht Update-Package Owin

ABER

Install-Package Microsoft.Owin

hat gut für mich funktioniert, danke.

Иво Недев
quelle
1
Vielen Dank MrИво Недев
Rejwanul Reja
1
Ich habe beides gemacht, aber der rote Schnörkel würde nicht verschwinden. Dann schloss ich die Lösung und öffnete sie wieder und der rote Schnörkel war verschwunden. = /
Christopher D. Emerson
8

Die IAppBuilder-Schnittstelle befindet sich unter dem Owin-Paket. Fügen Sie einfach eine Referenz in Ihre Klassendatei ein:

mit Owin;

Und wieder aufbauen. Ihr Projekt wird dies aufgreifen.

Ich habe keine Ahnung, warum VS das nicht aufgegriffen hat, aber es hat nicht geklappt. Nachdem ich diesen Verweis zu meinem Projekt hinzugefügt hatte, passte alles zusammen.

Chris Smith
quelle
3

Beim Erstellen meines Projekts ist das gleiche Problem aufgetreten. Hier sind die Schritte, die zur Behebung meines Problems beigetragen haben:

  1. Gehen Sie zu Solution Explorerund suchen Sie nach Ihrem Projekt
  2. Erweitern Sie unter Ihrem Projekt die Option References; Sie sollten Warnungen auf der problematischen Referenz sehen
  3. Rechtsklick Referencesund öffnenManage NuGet Packages
  4. Suchen Sie den Namen der problematischen Referenz, dh Microsoft.Owin; Nach dem Laden wird angezeigt, dass es bereits installiert ist (es ist, aber es wurde falsch installiert. Überprüfen der Eigenschaften> Version in Schritt 2 zeigt 0.0.0.0)
  5. Prüfen Force uninstall, even if there are dependencies on it
  6. Deinstallieren
  7. Installieren
  8. Erstellen Sie das Projekt und führen Sie es aus

Probleme

Kann nicht installiert werden, Microsoft.Web.Infrastructureda es bereits im Paketordner vorhanden ist. Zurück rollen...

  1. Gehen Sie zu Ihrem Projektordner und suchen Sie nach Paketen
  2. Finden Sie das problematische Paket dh Microsoft.Web.Infrastructure
  3. Löschen Sie den Ordner
  4. Fahren Sie mit Schritt 7 fort

Alternativen

Hier sind die Alternativen, über die ich gelesen habe, um diese Art von Problem zu beheben.

  • Projekt / Lösung bereinigen und neu erstellen
  • Starten Sie Visual Studio neu
  • Starten Sie den PC neu

Viel Glück.

dsapalo
quelle
2

Mein Visual Studio 2013 hat aus irgendeinem Grund nicht erkannt, dass die Referenzpfade vorhanden sind. Das gelbe Ausrufezeichen vor den Referenzen wurde für alle hinzugefügten Pakete angezeigt. Ich habe ../packages/ überprüft, aber alle Dateien waren vorhanden. Ich habe auch die .csproj-Datei geöffnet, die auf die richtigen Pfade verweist.

Das Schließen und Öffnen der Lösung führte zu einer Reihe von Fehlern und konnte die in der Lösung enthaltenen Projekte nicht laden.

Durch einen Neustart von Visual Studio 2013 wurde der Tag aus unerklärlichen Gründen gespeichert.

Crypth
quelle
Ich brauchte einen kompletten Neustart
werde
1

Das folgende Äquivalent von using in F # zeigt ein Problem beim Ausblenden des IAppBuilder. Es stellt sich heraus, dass die Owin-Bestimmung als unvollständige System.Web.Http.Owin-Referenz interpretiert wurde, obwohl auf die Owin.dll verwiesen wurde, die den Owin-Namespace bereitstellt.

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

Das Problem wurde behoben, indem die Verwendungen wie folgt neu angeordnet wurden:

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

... zugegeben, dies kann ein Fehler sein, der dem F # -Compiler eigen ist, und Namenskonflikte werden in C # und anderswo besser behandelt.

George
quelle
0

In meinem Fall habe ich die Projektordner und den Speicherort der vs-Lösungsdatei (.sln) verschoben. Nachdem ich die Projekte erneut hinzugefügt hatte, befand sich auf Lösungsebene ein Paketordner, und einer befand sich in einem Projektunterordner. Auf diese Weise wurden in diesem Projekt die relativen Paketordner-Links in der .csproj-Datei durcheinander gebracht.

Die Neuinstallation oder andere Tipps zum Nuget-Paketmanager in diesem Thread waren hilfreich. Ich habe festgestellt, dass nach der Neuinstallation einiger Pakete in meinem Git-Quellcode diff der Pfad des Paketordners in der csproj-Datei geändert wurde.

Vor

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

Nach

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

Wenn Sie also dasselbe Problem ausführen und viele Nuget-Pakete haben, ist es möglicherweise einfacher, die gesamte Lösung zu schließen, die csproj-Datei (en) in einem Texteditor wie vscode zu öffnen und die entsprechenden Links durch Suchen und Ersetzen zu korrigieren . Speichern, schließen, öffnen Sie die Lösung in VS und stellen Sie die Nuget-Pakete wieder her. Das sollte den Trick machen. (In jedem Fall sollten Sie den lokalen Paketordner auf Projektebene löschen, damit das Projekt wirklich fehlschlägt, wenn es nicht die richtigen Pakete erhält.)

AIsmaili
quelle
0

Es ist ein Bestellproblem.

using Microsoft.Owin;
using Owin;

Führt dazu, dass Microsoft.Owin zuerst definiert wird, dann wird Owin unter dem bereits importierten Microsoft-Namespace gefunden. Wenn Sie mit der Maus über Owin fahren, um Owin zu verwenden, sollten Sie sehen, dass es erneut in Microsoft.Owin aufgelöst wurde. Außerdem wird die IDE bei Verwendung von Owin als redundante, nicht verwendete Referenz ausgegraut.

Tun:

using global::Owin;

Dies stellt klar, dass der Compiler unter bereits definierten Namespaces (z. B. Microsoft. Namespace) nicht nach Owin suchen soll.

David Burg
quelle
-1

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

Suchen Sie nach dem von Ihnen verwendeten Visual Studio. Den folgenden Kommentar finden Sie

Hinweis: Wenn Sie Visual Studio 2012 verwenden, ist die Vorlage SignalR Hub Class (v2) nicht verfügbar. Sie können stattdessen eine einfache Klasse namens ChatHub hinzufügen.

Hinweis: Wenn Sie Visual Studio 2012 verwenden, ist die Vorlage für die OWIN-Startklasse nicht verfügbar. Sie können stattdessen eine einfache Klasse namens Startup hinzufügen.

user6449354
quelle