Ich habe festgestellt, dass eine App, die auf 4.5 abzielt, eine Assembly mit dem Ziel 4.5.2 laden und ausführen kann - aber ich kann ein solches Setup nicht kompilieren!Wie kann ich eine .NET 4.5-App mit einem Verweis auf .NET 4.5.2 Assembly kompilieren?
Frage: Wie kann ich eine .NET 4.5 App mit einem Verweis auf .NET 4.5.2 Assembly kompilieren?
Experiment Details:
- MyLib.csproj - Ziele 4.5.2
- MyApp.csproj - Ziele 4.5, hat Projektverweis auf MyLib.csproj
Das Kompilieren in Visual Studio oder MSBuild schlägt fehl mit:
Warnung MSB3274: Die primäre Referenz "(...) \ MyLib.dll" konnte nicht aufgelöst werden, da sie gegen das Framework ".NETFramework, Version = v4.5.2" erstellt wurde. Dies ist eine höhere Version als das derzeit ausgerichtete Framework ".NETFramework, Version = v4.5".
Fehler CS0246: Der Typ oder Namespace-Name ‚MyLib‘ konnte nicht gefunden werden (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis?)
Ich versuchte MyLib getrennt und verweisen seine DLL zu kompilieren, bekam aber die gleiche Kompilierungsfehler.
Allerdings gelang es mir, beide kennen zu laufen:
- beide Projekte Set bis 4,5, kompilieren, um das Ergebnis zu c kopieren: \ test \ MyApp.exe
- Stellen Sie beide Projekte 4.5.2 , kompiliere, kopiere das Ergebnis nach c: \ test \ MyLib.dll
- Run MyApp.exe - läuft ok!
Hintergrund: ich einen Übergang von unserem großen NuGet-Managed Multi-Projekt von .NET 4.5 bis 4.5.2 vor. Die sagt It is a highly compatible, in-place update to the .NET Framework 4, 4.5 and 4.5.1
, also habe ich versucht, was passieren würde, wenn wir einige unserer (NuGet-verwalteten) Refs auf 4.5.2 aktualisiert, und nicht aktualisierte Projekte versucht, sie zu konsumieren.
Warum nicht einfach das Ziel ändern 4.5.2? –
Ja, es ist ein sehr ** rückwärts ** kompatibles Update. Nicht weitergeleitet, sie haben kein Update für 4.5 mit allen hinzugefügten Typen und Mitgliedern veröffentlicht. Also würde Ihre App auf der Maschine mit nur 4,5 in Ordnung starten, dann schrumpfen, kiel und stirbt mit einer lausigen Ausnahme, wenn Ihr Code die nicht vorhandenen Mitglieder verwendet. Welches ist die Warnung? Es gibt eher geringe Chancen, dass Sie solche hinzugefügten Mitglieder * tatsächlich * verwenden. Es gibt wenige, so dass es keinen Sinn hatte, 4.5.2 zu targetieren. –
@roryap: Das Beispiel ist natürlich erfunden. Unser Projekt ist groß, mit über 1000 Projekten, die mehrere Lösungen umfassen, und viele produzieren Binärdateien, die über NuGet an andere Lösungen verteilt werden. Also versuche ich, ALLE Verbraucher eines bestimmten Binaries zu aktualisieren, bevor ich die Binärdatei selbst aktualisiere. – Jonathan