it-swarm.com.de

Veröffentlichung der Webanwendung in einem relativen Dateisystempfad

Ich stelle ein Publizieren auf einen relativen Pfad ein, um lokal zu testen (insbesondere XML-Konfigurationsumwandlungen). Jeder Entwickler hat seinen eigenen Pfad zu dem ausgecheckten Projekt, und ich möchte eine Veröffentlichung einrichten, die von der Maschine/Umgebung unabhängig ist.

Das Veröffentlichungsdialogfeld weist nicht auf zulässige Variablen oder Platzhalterzeichen hin und akzeptiert obj\publish oder file://./obj/publish nicht.

Gibt es eine Möglichkeit, in einem relativen Dateisystempfad zu veröffentlichen?

47
Maslow

Bearbeiten

Für Visual Studio 2012 funktioniert diese Lösung nicht. Sie sollten sich die Antwort von michielvoo gleich nach diesem anschauen.

Ursprüngliche Antwort

Nach dem Versuch habe ich die Lösung gefunden: Sie können einen relativen Pfad verwenden, indem Sie festlegen

file:///./obj/publish

im Publish WebApp-Dialogfeld müssen Sie jedoch einen Pfad verwenden, der bereits vorhanden ist und von dem Benutzer, den Sie verwenden, beschrieben werden kann. Auf diese Weise können Sie Ihre Web-App in einem lokalen Ordner oder in einem Pfadordner veröffentlichen.

Lassen Sie mich wissen, ob das hilft. Es hat für mich getan.

17
marzapower

Für diejenigen, die Visual Studio 2012 und die neue Veröffentlichungskonfigurationsdatei (Properties/PublishProfiles/Local.pubxml) verwenden, können Sie diese Syntax in der Datei selbst verwenden:

<Project ToolsVersion="4.0" xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <SiteUrlToLaunchAfterPublish />
    <publishUrl>$(MSBuildThisFileDirectory)..\..\obj\publish</publishUrl>
    <DeleteExistingFiles>True</DeleteExistingFiles>
  </PropertyGroup>
</Project>

Beachten Sie, dass die $ (MSBuildThisFileDirectory) -Eigenschaft in das Verzeichnis Local.pubxml aufgelöst wird. Von dort sollten Sie nach oben fahren, um dorthin zu gelangen, wo Sie sein müssen.

Dies hat für mich in Visual Studio 2013 funktioniert:

file:\\..\..\..\Publish

Bitte beachten Sie, dass dies nicht in obj\publish veröffentlicht wird, wie vom ursprünglichen Poster gewünscht, sondern in einem anderen Verzeichnis (ein paar Ordner) auf meinem System, wie gewünscht. Ändern Sie es für obj\publish, wenn Sie möchten.

5
Dean

VS 2015 akzeptiert so etwas

..\..\..\DeployFiles

Der Ordner wird auch erstellt, wenn er fehlt, sodass Ihre Veröffentlichungseinstellungen in die Quellcodeverwaltung übernommen werden können. Sie können jedoch den Ordner DeployFiles und dessen Inhalt einfach ignorieren.

3
wingyip

Nur ein normaler Pfad mit Schrägstrichen funktioniert in Visual Studio 2012:

../../../../../app

Dies beginnt im Stammverzeichnis des veröffentlichten Projekts.

3
DKroot

Für den Fall, dass ein zusätzlicher Post-Publish-Schritt msdeploy (MSVS 2015, dnx) mit einem relativen Pfad aufrufen muss, besteht eine weitere Alternative darin, die Projektdatei (nicht die pubxml-Datei, obwohl dies auch funktionieren kann) zu bearbeiten und eine Variable zu erstellen, die konvertiert wird der relative Pfad in einen absoluten Pfad.

<Target Name="AfterWebPublish" AfterTargets="WebPublish">
     <!-- 
          msdeploy cannot currently handle relative paths for contentPath so first convert it to an absolute path 
     -->    
    <PropertyGroup>
        <AbsOutDir>$([System.IO.Path]::GetFullPath("$(ProjectDir)$(OutDir)"))</AbsOutDir>
    </PropertyGroup>

    <Exec WorkingDirectory="$(ProjectDir)" Command='call "$(DevEnvDir)..\Tools\vsvars32.bat"' />    
    <Exec WorkingDirectory="$(ProjectDir)" Command='"C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy" -verb:sync -source:contentPath="$(AbsOutDir)PublishOutput" -dest:package="$(AbsOutDir)$(MSBuildProjectName).Zip"' />
  </Target>

Anschließend kann $(AbsOutDir) an anderen Stellen verwendet werden (z. B. für msdeploy contentPath). Ich glaube nicht, dass es im Dialog eingegeben werden kann.

Von " how-can-i-get-msbuild-to-evalu-and-print-the-full-path-when-given-a-relative ".

0
crokusek