2017-11-29 1 views
0

Also habe ich ein Projekt mit dem folgenden Aufbau haben:Netcore Kommandozeile Build für Köder Handhabung und schalten

syntax: Project (Assembly Name) - P1 (Assembly-1) - P2.A (Assembly-2) - P2.B (Assembly-2) - P3 (Assembly-3)

Der Punkt, von dem Köder zu erleichtern war und Schalter, wo P2.A und P2. B haben beide den gleichen Assemblynamen.

Proj Abhängigkeit ist so, dass P3 eine Abhängigkeit von allem anderen ist. P1 ist ein Netz-Standard-Projekt, das von P2.A (der Köder) abhängt und die Baugruppe wird mit P2.B auf den jeweiligen Plattformen wie erwartet ausgetauscht

Jetzt im Unit-Test-Projekt, innerhalb dieser Lösung, wo ich nicht abhängig bin auf einem nugget-Paket, aber direkt auf den Projekten, habe ich ein UnitTest-Projekt in Abhängigkeit von P1, P2.B, P3.

Wenn ich dies in Visual Studio kompilieren funktioniert es wie erwartet (auch dieser Teil scheint riskant, wie die Assembly von P2.B war der letzte übertragen in den Ausgabeordner und nicht P2.A, die P1 abhängt, aber für aus irgendeinem Grund funktioniert das). Wenn ich jedoch versuche, einfach eine dotnet build von der Befehlszeile aus zu tun, scheitert es entlang der Linien von error : Cannot find project info for '**\P2.A.csproj'. This can indicate a missing project reference. Ich rate irgendwo der Assemblyname, der zwischen Projekt P2.A und P2.B gleich ist, Sachen, nicht sicher, wie man dies umgeht .

Wenn ich nur das Komponententestprojekt von direkt abhängig von P2.B entferne, funktioniert es gut von der Befehlszeile auch, aber dann sind wir nur mit der Köderdll verlassen.

Nicht sicher, warum sich das Verhalten von Visual Studio und Befehlszeile unterscheidet.

Ich habe auch versucht, dies zu lösen, indem Sie die direkte Abhängigkeit zu P2.B entfernen und stattdessen ein msbuild Target for AfterTargets = "Build" einrichten, um den Build von P2.B auszulösen und den Ausgabepfad entsprechend dem als zu liefern der Ausgabeordner des Einheitentestprojekts. Dieses funktioniert, wo der Schalter auftritt und dotnet build/test funktioniert gut. aber das Erstellen mit einer angegebenen Laufzeit schlägt dann fehl error : Assets file '**\P2.B\obj\project.assets.json' doesn't have a target for '.NETStandard,Version=v1.2/win10-x64' welche OFK funktioniert nur in Ordnung, wenn ich das benutzerdefinierte MSBuild-Ziel für nach dem Build-Targeting P2.B entfernt habe

Alle Hinweise, um dies gelöst zu bekommen wäre sehr hilfreich.

Dank

Wenn es Visual Studio 2017 (15.4.1) Dotnet sdk (2.0.2)

+0

Ich habe ein Beispiel erstellt, konnte dieses Problem jedoch nicht reproduzieren, nicht sicher, ob ich etwas falsch gemacht habe. Würde es Ihnen etwas ausmachen, uns ein einfaches Testsample zu geben, damit wir dieses Problem reproduzieren können? – Alex

+0

@Judy soz Ich habe das vermisst. Ich hatte tatsächlich das zweite Problem gelöst, also ging nur über diese Route, wie ich in der Antwort erwähnt habe. Vielen Dank, dass Sie uns helfen können. – Viv

Antwort

0

Für den Fall, jemand anderes läuft in einem ähnlichen Problem für Bait and Switch hilft ich verwende, habe die zweite Ausgabe (custom target for after build but issue with building with a specified runtime then fails) gelöst. Dieser Fehler schien für einen fehlenden Restore Target Build Trigger zu sein.

So zu bekommen diese funktionsfähig zu sein:

  • Ich entfernte den „switch“ lib (P2.B) von einem direkten Projektreferenzabhängigkeit des Unit-Test-Projekt ist
  • Added die als folgende benutzerdefiniertes Ziel

Im Test der Netzkerneinheit Testprojekt.csproj

<Target Name="BaitAndSwitchTarget" AfterTargets="Build"> 
    <PropertyGroup> 
    <LinkedProject>..\P2.B\P2.B.csproj</LinkedProject> 
    </PropertyGroup> 
    <MSBuild Condition="'$(LinkedProject)' != '' " Projects="$(LinkedProject)" Targets="Restore" /> 
    <MSBuild Condition="'$(LinkedProject)' != '' " Projects="$(LinkedProject)" Targets="Build" Properties="OutputPath=..\$(MSBuildProjectName)\$(OutputPath)" /> 
</Target> 

diese dann baut im Wesentlichen den Schalter Ziel als nach Build-Schritt und legt sie in den Ausgabeordner des Unit-Test-Projekt und sieht aus wie dotnet build/test/... funktioniert gut von CLI.

+0

vielen Dank, dass Sie Ihre Lösung hier geteilt haben. Sie könnten sie als Antwort markieren, damit sie anderen Community-Mitgliedern helfen kann, die die gleichen Probleme bekommen. – Alex