Laden...

System.Net.Http in verschiedenen Projekten werden nicht gefunden

Erstellt von schuppsl vor 5 Jahren Letzter Beitrag vor 5 Jahren 3.323 Views
S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 5 Jahren
System.Net.Http in verschiedenen Projekten werden nicht gefunden

Hallo zusammen,

im Moment stecke ich in einer DLL Hell und weiß nicht wie ich da heraus komme.

Also ich habe mehrere Projekte, die aufeinander aufbauen:

Projekt.DomainModel
Projekt.Provider
Projekt.BusinesLayer (Projekt.BLL)

Alle drei Projekte bedarf die DLL des Vorgängers und wird per Reference eingebunden.
Also jeweils im Projekt=> Verweise.

Alle Projekte haben als Zielframework .NET 4.7, Plattformziel:Any und sind Klassenbibliotheken.

Am Ende wird die Projekt.BLL in eine weitere ASP.NET MVC5 Anwendung eingebunden.
Ebenfalls .NET 4.7, AnyCPU.

In der Webanwendung erstelle ich eine Klasse vom Typ Projekt.Provider.
An der Stelle kommt die Fehlermeldung, dass > Fehlermeldung:

System.Net.Http 4.2.0.0 nicht gefunden werden kann .

Hier habe ich mal aufgelistet, welches Projekt auf welche System.Net.Http referenziert.
Ich gehe dabei auf die referenzierte DLL im Projektmanager und dann auf Eigenschaften.
Alle System.Net.Http sind über Nuget, Version 4.3.4 eingebunden.

Projekt.DomainModel:
Version: 4.1.1.3
Pfad:
C:\Users\MeinUser\Documents\Visual Studio 2017\Projects\MeinProjekt\Projekt.Sort.Solution\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll

++
Projekt.Provider:++
Version: 4.2.0.0
Pfad:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.Net.Http.dll

++
Projekt.BusinessLayer++

Version: 4.1.1.3
Pfad:
C:\Users\MeinUser\Documents\Visual Studio 2017\Projects\MeinProjekt\Projekt.Sort.Solution\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll

Webanwendung:
Version: 4.1.1.3
Pfad:
C:\Users\MeinUser\Documents\MeinPfad\Entwicklung\WebProjekt\MeinProjekt\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll

Eigentlich ist der Fall glasklar:
Die System.Net.Http im Projekt Projekt.Provider referenziert nicht auf die Packages im Projektordner, sondern auf den lib Ordner.
Darum sucht die Webanwendung die Version 4.2.0.0, die natürlich sonst nirgends vorhanden ist.

Aber warum ist das so?
Ich installiere System.Net.Http immer über den Nuget Package Manager. Dieser macht das ja automatisch.

Wo kann hier eine Konfiguration anders sein?
Wie kann man so etwas in Zukunft vermeiden?

Nachtrag:

Vergleiche ich die .csproj Dateien der Projekt.BLL und Projekt.Provider sehe ich was erstaunliches:

Projekt:BLL:

<Reference Include="System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
    </Reference>

Projekt.Provider:

<Reference Include="System.Net" />
    <Reference Include="System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
      <Private>True</Private>
      <Private>True</Private>
    </Reference>

Zumindest der HintPath ist derselbe.

849 Beiträge seit 2006
vor 5 Jahren

Hallo Schuppsl,

Versuch mal das zweite <Private>True</Private> zu löschen.

Die 4.2.ér Version scheint nicht von deinem Projekt, sondern von einem BuildTarget referenziert zu sein.

Ist denn die Datei

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.Net.Http.dll

vorhanden?

4.931 Beiträge seit 2008
vor 5 Jahren

Sollten nicht beide <Private>True</Private> komplett gelöscht werden (bzw. auf False stehen), denn dieser Eintrag entspricht "Copy Local" (s.a What does the Private setting do on a ProjectReference in a MSBuild project file?)?

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 5 Jahren

Hallo Ihr beiden,
vielen Dank.
Leider jedoch hat das Löschen beider <private> Einträge nichts geholfen.

Die DLL existiert im angegebenen Pfad.

Zum Test habe ich mal im Projekt.Provider die System.Net.Http.DLL gelöscht und händisch vom o.G. Pfad wie in den anderen Projekten zugefügt.

Das löst das Problem leider auch nicht...weiß echt nicht mehr weiter.

Die Meldung in der Webanwendung:> Fehlermeldung:

Die Datei oder Assembly "System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" oder eine Abhängigkeit davon wurde nicht gefunden. Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein.

In der .csproj steht nun:

<Reference Include="System.Net" />
    <Reference Include="System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
    </Reference>
4.931 Beiträge seit 2008
vor 5 Jahren

Setze dann mal <Private>True</Private> in der Webanwendung (ich denke die System.Net.Http.dll muß lokal im Deploy-Ordner vorhanden sein).

849 Beiträge seit 2006
vor 5 Jahren

Hallo 2 Sachen würde ich noch probieren:

  1. Allerletzte Version von Studio installiert? -> Wenn nein -> update

  2. Falls 1. nichts geholfen hat, hilft vllt. ein Assembly Redirect (4.0.0.0 - 4.2.0.0) -> 4.1.1.3

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 5 Jahren

Hallo Schuppsl,

Die 4.2.ér Version scheint nicht von deinem Projekt, sondern von einem BuildTarget referenziert zu sein.

Ja, aber das Problem ist ja: Warum ist das so?

Edit.
Also das verstehe ich nicht:
Ich lösche die System.Net.Http aus den Verweisen.
Dann gehe ich in das Verzeichnis wie bei allen anderen:

C:\Users\MeinUser\Documents\Visual Studio 2017\Projects\MeinProjekt\Projekt.Sort.Solution\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll

Und füge diese aus diesem Verzeichnis hinzu.
Dann steht aber trotzdem wieder die Version 4.2.0.0 mit dem MSBuild Verzeichnis drin (Siehe Ausgangspost)

Wie kann denn das sein?

P.S. VS2017 ist auf dem aktuellsten Stand

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 5 Jahren

Also folgendes habe ich gemacht:

System.Net.Http aus den Verweisen gelöscht.
In der .csproj den Verweis darauf gelöscht
Den Ordner System.Net.Http.4.3.4 im Ordner packages gelöscht.
Per NuGet System.Net.Http installiert.

Die DLL zeigt jetzt zwar immer noch auf das MsBuild Verzeichnis, aber die Version stimmt jetzt und das ganze Läuft jetzt mal....

16.806 Beiträge seit 2008
vor 5 Jahren

Der Weg über NuGet ist hier auch der einzig korrekte.