2016-06-15 14 views
1

Ich möchte eine self contained Webanwendung mit .NET Core erstellen. Ich möchte eine beliebige Version von Windows zum Ziel und haben dies in meinem project.json:Ausrichtung mehrerer Runtimes beim Veröffentlichen einer .NET Core App

"runtimes": { 
    "win10-x64": { }, 
    "win8-x64": { }, 
    "win7-x64": { } 
} 

Als ich dotnet publish --runtime win10-x64 betreibe ich nur eine einzige Laufzeit zu einem Zeitpunkt, zu veröffentlichen angeben. Ich muss dann drei Kopien meiner Binärdateien verwalten.

Ist es möglich, meine App für alle drei Laufzeiten zu veröffentlichen und diesen Ordner als vollständig eigenständige Anwendung zu kopieren?

+0

Das macht für mich keinen Sinn. Wenn Sie den Veröffentlichungsbefehl ausführen, veröffentlichen Sie ihn auf dem System ** ONE **. Dieses System führt nur eine einzige Betriebssystemversion aus. Sie führen einfach den Veröffentlichungsbefehl für jedes Zielsystem aus, auf dem Sie bereitstellen. – Tseng

+0

@Tseng In RC1. Wenn Sie Windows als Ziel verwenden möchten, müssen Sie in RC2 auf eine Windows-Version abzielen, was die Bereitstellung komplizierter macht. @svick hat die richtige Idee mit "win7-x64", wir können alle Versionen von Windows unterstützen. –

+0

Nun, es macht die Implementierung nicht wirklich komplizierter, da Sie immer auf einem Computer/Betriebssystem bereitstellen und dort als Parameter hinzufügen. Sie können mit dnx genau das gleiche machen wie zuvor, aber Sie müssen eine portable App erstellen. Dies erfordert, dass Sie die Laufzeiten manuell installieren (das mussten Sie auch mit dnx tun) auf Ihren Windows-Rechnern. – Tseng

Antwort

5

Wenn Sie eine in sich geschlossene Anwendung erstellen, enthält sie alle Abhängigkeiten, die zum Ausführen benötigt werden. Soweit ich das beurteilen kann, unterscheidet sich die Veröffentlichung zu den verschiedenen Versionen von Windows nur darin, dass für ältere Versionen einige in den neueren Versionen integrierte Abhängigkeiten gebündelt werden müssen.

Das bedeutet, wenn Sie Wenn Sie eine Version Ihrer eigenständigen Anwendung haben möchten, die auf allen unterstützten Windows-Versionen ausgeführt wird, können Sie: einfach die älteste Version von Windows verwenden (win7-x64).

Derselbe Ansatz wird unter Linux wahrscheinlich nicht funktionieren, da Linux im Allgemeinen keine Binärkompatibilität zwischen den Versionen aufrechterhält.

+0

Es funktionierte sicherlich mit Mono unter Linux - wenn Sie Mono auf einem alt genug Linux-System gebaut haben, läuft es auf jeder neueren Version von Linux , RHEL, CentOS, Debian, SUSE, Ubuntu, was auch immer - ich würde gerne einen Weg finden, dies mit .NET Core zu tun, ohne ein Paket für jede Distribution zu veröffentlichen :( – Cocowalla