Ich habe ein mit VS2010 erstelltes ac # .Net 4.0-Projekt, auf das jetzt mit VS2012 zugegriffen wird.
Ich versuche, nur die benötigten Dateien von dieser Website an einem Zielspeicherort zu veröffentlichen (C: \ Builds \ MyProject [Dateien]).
Meine Dateistruktur: ./ProjectRoot/MyProject.csproj ./ProjectRoot/Properties/PublishProfiles/FileSystemDebug.pubxml
Ich führe folgendes über MSBuild aus:
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild.exe ./ProjectRoot/MyProject.csproj / p: DeployOnBuild = true /p:PublishProfile=./ProjectRoot/Properties/PublishProfiles/FileSystemDebug.pubxml
Hier ist die XML in FileSystemDebug.pubxml
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>FileSystem</WebPublishMethod>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<ExcludeApp_Data>False</ExcludeApp_Data>
<publishUrl>C:\builds\MyProject\</publishUrl>
<DeleteExistingFiles>True</DeleteExistingFiles>
</PropertyGroup>
</Project>
Das resultierende Verhalten ist:
- Hier wird eine Zip-Datei erstellt: ./ProjectRoot/obj/Debug/Package/MyProject.zip
<publishUrl>C:\builds\MyProject\</publishUrl>
WTF wird nichts bereitgestellt- Die erstellte Zip-Datei ist ein Schweinefrühstück und voller Dateien, die für die Anwendung nicht benötigt werden.
Wenn ich dieses Veröffentlichungsprofil über Visual Studio ausführe, wird ein Ordner unter * C: \ Builds \ MyProject * erstellt. der genau die gewünschten Artefakte enthält.
Wie bekomme ich dieses einfache Ergebnis von msbuild?
quelle
Condition="false"
ist aus Gründen der Abwärtskompatibilität vorhanden. Für VS2010 muss dieser Import vorhanden sein, auch wenn er aufgrund der falschen Bedingung übersprungen wird. Wenn Sie noch einmal nachsehen, werden Sie feststellen, dass das csproj einen weiteren Import enthält,$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets
der in die Zieldatei für die aktuelle Version von Visual Studio aufgelöst wird.$(MSBuildToolsVersion)
im Pfad, um die richtige VS-Version zu berücksichtigen :<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
. Dies funktionierte für mich bei VS2015 Update 1.Die Antwort finden Sie hier: http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild
quelle
Ich hatte immer noch Probleme, nachdem ich alle oben genannten Antworten ausprobiert hatte (ich verwende Visual Studio 2013). Es wurde nichts in den Veröffentlichungsordner kopiert.
Der Haken war, dass ich, wenn ich MSBuild mit einem einzelnen Projekt anstelle einer Lösung ausführe, einen zusätzlichen Parameter einfügen muss, der die Visual Studio-Version angibt:
12.0
ist für VS2013, ersetzen Sie durch die Version, die Sie verwenden. Nachdem ich diesen Parameter hinzugefügt hatte, funktionierte es einfach.Die vollständige Befehlszeile sieht folgendermaßen aus:
Ich habe es hier gefunden:
http://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/command-line-deployment
Sie geben an:
quelle
Mir scheint, dass Ihr Veröffentlichungsprofil nicht verwendet wird und einige Standardverpackungen durchgeführt werden. Die Microsoft Web Publish-Ziele erledigen alles, was Sie oben tun. Sie wählen die richtigen Ziele basierend auf der Konfiguration aus.
Ich habe meine Probleme im TeamCity MSBuild-Schritt problemlos gelöst, aber ich habe einen expliziten Pfad zum Profil angegeben. Sie müssen ihn nur beim Namen ohne .pubxml (z. B. FileSystemDebug) aufrufen. Es befindet sich so lange wie im Standardordner, der Ihnen gehört.
Beispiel:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe ./ProjectRoot/MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=FileSystemDebug
Beachten Sie, dass dies mit den Visual Studio 2012-Versionen der Microsoft Web Publish-Ziele durchgeführt wurde, die sich normalerweise unter "C: \ Programme (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web" befinden. Überprüfen Sie den Bereitstellungsordner auf die spezifischen Ziele der Bereitstellungstypen, die verwendet werden
quelle
Zu Ihrer Information: Das gleiche Problem beim Ausführen auf einem Build-Server (Jenkins mit installiertem msbuild 15, gesteuert von VS 2017 in einem .NET Core 2.1-Webprojekt).
In meinem Fall war es die Verwendung des "Publish" -Ziels mit msbuild, die das Profil ignorierte.
Also begann mein msbuild Befehl mit:
Dies löste den Veröffentlichungsprozess korrekt aus, aber keine Kombination oder Variation von "/ p: PublishProfile = FolderProfile" hat jemals das Profil ausgewählt, das ich verwenden wollte ("FolderProfile").
Als ich das Veröffentlichungsziel nicht mehr verwendete:
Ich dachte (dummerweise), dass es keinen Unterschied machen würde, aber sobald ich den DeployOnBuild-Schalter benutzte, nahm er das Profil korrekt auf.
quelle
Eigentlich habe ich alle Ihre Antworten zu meiner eigenen Lösung zusammengeführt, um das obige Problem zu lösen:
Das Ergebnis ist wie folgt:
msbuild /t:restore /t:build /p:WebPublishMethod=FileSystem /p:publishUrl=C:\builds\MyProject\ /p:DeleteExistingFiles=True /p:LastUsedPlatform="Any CPU" /p:Configuration=Release
quelle
Überprüfen Sie zunächst die Visual Studio-Version des Entwickler-PCs, auf dem die Lösung (das Projekt) veröffentlicht werden kann. wie gezeigt ist für VS 2013
Fügen Sie die obige Befehlszeile hinzu, um anzugeben, welche Art von Visual Studio-Version das Projekt erstellen soll. Wie bereits erwähnt, kann dies passieren, wenn wir versuchen, nur ein Projekt zu veröffentlichen, nicht die gesamte Lösung.
Der vollständige Code wäre also ungefähr so
"C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe" "C: \ Programme (x86) \ Jenkins \ Arbeitsbereich \ Jenkinssecondsample \ MVCSampleJenkins \ MVCSampleJenkins.csproj" / T: Build; Package / p : Configuration = DEBUG / p: OutputPath = "obj \ DEBUG" / p: DeployIisAppPath = "Standardwebsite / jenkinsdemoapp" /p:VisualStudioVersion=12.0
quelle
MSBuild C:\PathToMyProject\MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=MyPublishProfile /p:VisualStudioVersion=12.0
folgt lautet : Dieser Parameter hat mir gefehlt und mein Problem behoben. Sie müssen nur die Antwort vollständig erwähnen!