03 May
2006

App_Offline.htm Support für das Web Deployment Project

 

Wenn man mit dem Web Deployment Project (WDP) [1] für ASP.NET 2.0 arbeitet und seine Anwendungen im Intranet veröffentlicht, so wird man sicherlich feststellen dass das WDP keinen Support für die App_Offline.htm [2] wie zum Beispiel das Standard Web Deployment bietet. Und man während des Veröffentlichen der Anwendung diese nicht mit einfachen Mitteln "sauber" außer Betrieb setzen kann. Doch da dass WDP auch nur "mit" MSBuild arbeitet kann man dies nachrüsten Dazu einfach mit der rechten Maustaste auf das WDP-Project im Solution Explorer gehen und Open Project File aus dem Menü auswählen. Am Ende der Datei findet man ein paar auskommentierte <Target /> Tags. Dahinter, aber vor dem </Project> End-Tag, fügt man nun folgendes ein.

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">    
    <DeployPath>$(OutputPath)..\RealRelease\</DeployPath>  
/PropertyGroup>   
<Target Name="AfterBuild"    
        Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">

    <!-- Deployment Pfad erstellen und die Applikation Offline setzen -->    
    <MakeDir Directories="$(DeployPath)"/>    
    <Copy SourceFiles="$(SourceWebPhysicalPath)\Offline.htm" 
          DestinationFiles="$(DeployPath)App_Offline.htm"  ContinueOnError="true" />    
    <!-- Alle Dateien einlesen um sie dann zu löschen, aber nicht die App_Offline.htm -->   
    <CreateItem Include="$(DeployPath)**\*.*" Exclude="$(DeployPath)App_Offline.htm" >     #
        <Output ItemName="_OldDeployFiles" TaskParameter="Include" />    
    </CreateItem>    
    <Delete Files="@(_OldDeployFiles)" ContinueOnError="false" /> 
    <!-- Nun alle Dateien aus dem "Tmp" Release Order in den Deployment Pfad kopieren -->    
    <CreateItem Include="$(OutputPath)\**\*.*" >     
        <Output ItemName="_ReleaseFiles" TaskParameter="Include" />    
    </CreateItem>    
    <Copy   SourceFiles="@(_ReleaseFiles)" 
            DestinationFolder="$(DeployPath)%(_ReleaseFiles.SubFolder)%(_ReleaseFiles.RecursiveDir)"
            ContinueOnError="false" />      
    <!-- Durch löschen der App_Offline.htm die Applikation wieder Online setzen -->    
    <Delete Files="$(DeployPath)App_Offline.htm" ContinueOnError="true" />    
</Target>  

 

Nutzt man dies so wird der Output Folder den man in der Konfiguration angegeben hat nur noch als Temporärer Ordner verwendet, also dort nicht den eigentlichen Ziel-Ordner angeben. Den eigentlichen Ziel-Ordner muss man separat in der Projekt-Datei definieren. Innerhalb der DeployPath-Tags trägt man den Pfad ein. Das Beispiel hier ist an die lokalen Gegebenheiten anzupassen. Desweiteren muss eine Offline.htm im Hauptordner der Web-Anwendung vorhanden sein, diese wird dann während des kopieren zur App_Offline.htm. Der Kopierschritt wird nur im Release Build gemacht, sollte die Bezeichnung des Builds bei Dir abweichen, so ist das Condition-Attribut des Target entsprechend anzupassen. Das ganze nun speichern. Sollte danach das Deployment Projekt nicht mehr korrekt in der Solution ausführbar sein, so ist wahrscheinlich ein Fehler in der Projekt Datei. Diesen dann korrigieren, und ein Reload Project auf dem Projekt machen (Rechte Maustaste).


[1] http://der-albert.com/archives/41-Web-Deployment-Project-ist-fertig.html
[2] http://weblogs.asp.net/scottgu/archive/2005/10/06/426755.aspx


Der Eintrag ist mir etwas Wert
 
Comments have been closed on this topic.