2017-08-11 2 views
0

Ich habe eine alte ASP.Net-App für das .NET Framework 4.7. Diese App war eine fünfjährige Entwicklungsübung und ist sehr ausgereift. Es hat einige unterstützende Bibliotheksprojekte in der gleichen Lösung. Es gibt drei EF6-Projekte für die Datenbankkommunikation.Wie packe ich eine gemischte Projektlösung mit nur einem Build-Schritt in VSTS?

Wir haben mit dem Wechsel zu .NET Core begonnen und ein neues .NET Core-Webprojekt für .NET Framework 4.7 hinzugefügt, damit wir die EF6-Projekte während der Migration verwenden können. Das funktioniert alles gut.

Unser Quellcode wird in VSTS gehostet und wir verwenden einen Remote-Build-Server in unserer Domäne anstelle eines Azure-Build-Servers. Ich kann die Lösung ohne MSBuild-Argumente erfolgreich erstellen. Aber die MSBuild-Argumente, die ich für das Bereitstellungspaket benötige, sind für die ältere ASP.Net-App und die ASP.Net Core-App unterschiedlich. Also habe ich zwei Lösungen erstellt, eine mit dem alten Projekt und allen Bibliotheksprojekten, aber nicht mit dem ASP.Net Core-Projekt. Und noch eins mit dem ASP.Net Core-Projekt und allen Bibliotheksprojekten, aber nicht mit dem älteren ASP.Net-Projekt. Ich habe auch zwei Build-Schritte, einen für jede Lösung, der die MSBuild-Argumente enthält, die jedes Webprojekt zum Erstellen des Bereitstellungspakets benötigt.

Ich frage mich, ob jemand weiß, wie man diese Einstellung ändert, so dass ich nur einen Build-Schritt auf der Hauptlösung habe. Gibt es einen VSTS-Task, der die Ausgabe aus dem Build übernimmt und die benötigten Bereitstellungspakete erstellt? Ich brauche web.config-Transformationen auf dem älteren ASP.Net-Projekt, aber das wird nicht mit .NET Core unterstützt, also denke ich, dass das der Fall ist. Ich weiß, dass es eine Möglichkeit gibt, eine Azure-Bereitstellungslösung zu erstellen, die DSC und Powershell verwendet, um alles zu paketieren und zu implementieren, aber das scheint mir ein Overkill zu sein. Ich habe die zwei MSBuild Setups unten aufgeführt.

Vermächtnis ASP.Net MSBuild Argumente:

/p: DeployOnBuild = true/p: WebPublishMethod = Paket/p: PackageAsSingleFile = true/p: SkipInvalidConfigurations = true/p: Package = "$ (build .artifactstagingdirectory) \ App“/ p: AutoParameterizationWebConfigConnectionStrings = false

ASP.Net Kern MSBuild Argumente:

/p: DeployOnBuild = true/p: WebPublishMethod = Pac Kage/p: PackageAsSingleFile = true/p: SkipInvalidConfigurations = true /p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\RSD.zip“/ p: DeployIisAppPath = "Default Web Site"

+1

Sie können kein ".NET Core-Webprojekt für .NET Framework 4.7" verwenden. Meintest du ASP.NET Core? – mason

+0

Die einzige Lösung, die ich mir vorstellen kann, macht es "komplizierter" als das Hinzufügen einer benutzerdefinierten MSBuild-Projektdatei, die sich um den CI-Prozess kümmert, aber das Konfigurieren der richtigen Einstellungen für jede Zweigstelle ermöglicht Sie müssen das CI jedes Mal neu konfigurieren, wenn Sie Ihre Anwendungsstruktur ändern. Ist das eine Option für dich? (ähnlich zu diesem [CI-Skript] (https://gist.github.com/dasMulli/69f5303aa79a8cd4060e44891c90fd2d)) –

+0

Ich tatsächlich ASP.Net Core. Sorry, ich habe ASP.Net Core an den meisten Stellen erwähnt, aber "ASP" in einer meiner Referenzen weggelassen. – Brian

Antwort

0

Sie veröffentlichen erstellen Profil für jedes Projekt mit dem gleichen Namen, dann stellen Sie Projekte mit dem Profil bereit, indem Sie /p:DeployOnBuild=true /p:PublishProfile=[profile name] angeben.

Hinweis: Sie müssen relativen Pfad des Paketspeicherorts im Veröffentlichungsprofil angeben. (z. B. .... \ a \ Web1.zip)

+0

Das klingt vielversprechend. Ich werde es versuchen und die Ergebnisse überprüfen. – Brian

+0

@Brian Fühlen Sie sich frei, das Ergebnis hier zu posten. –

+0

Ahh, ich habe missverstanden, was du damit gesagt hast. Dies würde immer noch zwei separate Builds erfordern. Ich würde gerne einen Build auf der SLN durchführen, die alle Projekte enthält (asp.net v4 und asp.net core v2.0 targeting net47). Die Ergebnisse daraus nehmen das asp.net v4-Projekt auf einer Website und die Ergebnisse des asp.net core 2.0-Projekts auf einer separaten Website auf. – Brian

Verwandte Themen