ich andere Beiträge hier auf Stackoverflow gefunden habe, die ich erlebe, zum Beispiel mit meiner Frage beschäftigen:Einbinden von Dateien außerhalb des Projektes in MSBuild
MSBuild: Deploying files that are not included in the project sowie Include Files in MSBuild that are not a part of the project Ich wollte den Code teilen, die ich kann nach dem Lesen dieser Beiträge erstellen und bitten um Hilfe, warum es nicht funktioniert?
Um zu erläutern, was genau falsch ist und was ich vorhabe zu tun. Ich verwende Visual Studio 2012 und TFS 2012.
Ich habe eine Batch-Datei namens CreateMyFiles.bat, und was ich tun möchte, ist dies auszuführen und dann die Dateien zu nehmen, die es ausgibt (es gibt sie auf meine Includes/Javascript/Bundled-Ordner) und sie in einen Teil des Builds in MSBuild einbinden (damit sie auf dem IIS-Zielserver bereitgestellt werden).
Als ich mein lokales .csproj in meinem lokalen Visual Studio bearbeitet habe und den unten stehenden Code am Ende der Datei hinzugefügt und neu geladen habe, konnte ich mit der rechten Maustaste auf mein Webprojekt klicken, 'veröffentlichen' auswählen und dann meinen auswählen lokales dateibasiertes Publishing-Profil, das meine Dateien tatsächlich an den richtigen Ort deployed hat. Es funktionierte!
Ich dann eingecheckt in meinem Code zu TFS, und ging zu "Builds" auf TFS, und in eine neue Build eingereiht. Sicher genug, ich konnte sehen, die Dateien in das gleiche Verzeichnis auf dem Build-Server ausgegeben. Jetzt bin ich nicht 100% sicher über MSBuild, aber mir ist aufgefallen, dass genau wie beim lokalen Publizieren ein _publishedWebsite-Ordner auf dem Build-Server erstellt wurde (ein Verzeichnis über der Quelle). Die Sache ist, in diesem publishedwebsite-Ordner, meine manuell erstellten Dateien waren nicht vorhanden. Darüber hinaus hatte ich nach dem Build leider nicht die gewünschten Dateien auf dem Ziel-Webserver.
So scheint es, wenn ich manuell veröffentlichen würde, funktioniert der Code unten, aber wenn ich einen Build mit TFS in die Warteschlange stellen sollte, funktioniert es nicht. Verwendet MSBuild Publish? Könnte das der Grund sein, warum es unten nicht funktioniert?
Hier ist der Code, den ich in meiner CSPROJ Datei platziert haben:
<Target Name="CustomCollectFiles">
<Exec Command="CreateMyFiles.bat" /> <!-- Generate Files -->
<ItemGroup>
<!-- Create an identity called _CustomFiles, and associate it to the files I created -->
<_CustomFiles Include="Includes\JavaScript\Bundled\*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Includes\JavaScript\Bundled\*%(Filename)%(Extension) </DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
<!-- Hook into the pipeline responsible for gathering files and tell it to add my files -->
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>
Ich bin wirklich auf diese stecken und wollte, warum die Dateien nach Hilfe fragen, vielleicht nicht gehen. Ich vermute, dass MSBuild keine Veröffentlichung verwendet und deshalb lokal funktioniert (weil ich Publish auswähle)?
so vielen Dank für Ihre Hilfe
UPDATE schon versucht, diese als pro Kommentar unten, aber dieses Mal wird die Dateien nicht einmal erschienen ist (so schien es, die Aufgaben läuft jetzt nicht einmal). Irgendeine Idee warum? Habe ich das richtig eingegeben?
<Target Name="CustomCollectFiles">
<Exec Command="CreateMyFiles.bat" />
<!-- Generate Files -->
<ItemGroup>
<!-- Create an identity called _CustomFiles, and associate it to the files I created -->
<_CustomFiles Include="Includes\JavaScript\Bundled\*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Includes\JavaScript\Bundled\*%(Filename)%(Extension) </DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
<!-- Hook into the pipeline responsible for gathering files and tell it to add my files -->
<PropertyGroup>
<PipelineCollectFilesPhaseDependsOn>
CustomCollectFiles;
$(PipelineCollectFilesPhaseDependsOn);
</PipelineCollectFilesPhaseDependsOn>
</PropertyGroup>
UPDATE 2 Wenn ich den obigen Code nehmen und sie in meine pubxml Datei platzieren und führen dann eine tatsächliche veröffentlichen, es funktioniert, aber so weit ich unser Prozess-Know ist, nur einen Build Warteschlange von TFS. Ist es möglich, in den obigen Codeblock einzuhaken, wenn man einfach einen Build einreiht? Oder muss ich veröffentlichen?
CopyAllFilesToSingleFolderForPackageDependsOn
zu:
aktualisieren
CopyAllFilesToSingleFolderForMsdeployDependsOn:
Also, wenn ich ein Build in TFS einreihen, führt es * NOT * eine Veröffentlichung aus? Gibt es eine Möglichkeit, dass ich den obigen Code ausführen kann, ohne veröffentlichen zu müssen? – NullHypothesis
no no veröffentlichen, es sei denn, Sie sagen es mit den oben gezeigten MSBuild-Argumenten. Sie könnten etwas Ähnliches tun, aber Ihr Code oben ist auf die Veröffentlichung ausgerichtet ich nehme an, dass "FilesForPackagingFromProject" im Code ist –
Danke so was ich denke passiert ist, dass, wenn ich in der Warteschlange, ich sehe die Dateien an die verschoben werden Publishing-Ziel einfach wegen der MS-Build-Aktivität, oder? Gibt es Schaden, wenn man auch publiziert? – NullHypothesis