2012-09-20 4 views
7

Ich möchte Visual Studio zu precompile my ASP.NET application, die als eine Azure-Webrolle Nutzlast verwendet wird. So habe ich this post gefunden, die erklärt, wie man aspnet_compiler aufruft, um Ansichten zu validieren.Wie bekomme ich aspnet_compiler von Visual Studio während des Builds aufgerufen?

Ich habe versucht, die folgenden auf "Post-Build-Ereignis" meiner ASP.NET-Anwendung hinzuzufügen:

call "%VS100COMNTOOLS%\vsvars32.bat" 
aspnet_compiler -v/-p $(ProjectDir) 

oder alternativ diese (Anwendungsname explizit angegeben):

call "%VS100COMNTOOLS%\vsvars32.bat" 
aspnet_compiler -v /ASP.NET-Application-ProjectNameHere -p $(ProjectDir) 

In beiden Fälle, wenn der Build läuft Ich sehe folgendes in der Build-Ausgabe:

Setting environment for using Microsoft Visual Studio 2010 x86 tools. 
Utility to precompile an ASP.NET application 
Copyright (C) Microsoft Corporation. All rights reserved. 

und klar keine vor Die Kompilierung findet statt, weil, wenn ich eine .aspx- oder .cshtml-Datei "Build Action" auf "None" ändere, sie nicht zum Azure-Service-Paket gelangt und die Ansicht nicht mehr geöffnet wird, nachdem das Paket in Azure bereitgestellt wurde.

Wie kann ich aspnet_compiler für die Vorkompilierung von innerhalb von Visual Studio einrichten?

Antwort

4

Wenn Sie Asp.NET Compiler in Ihrem Visual Studio verwenden möchten/msbuild dann können Sie AspNetCompiler Aufgabe zu Ihrer Projektdatei hinzufügen (CSPROJ/.vbproj) und stellen MvcBuildViews zu true.

Beispiel:

<Project> 
    <PropertyGroup> 
    <MvcBuildViews>true</MvcBuildViews> 
    </PropertyGroup> 
    <!-- ... --> 
    <Target Name="PrecompileWeb" AfterTargets="build" Condition="'$(MvcBuildViews)'=='true'"> 
    <Message Text="Starting AspNetCompiler for $(ProjectDir)" Importance="high" /> 
    <AspNetCompiler 
     VirtualPath="temp" 
     PhysicalPath="$(WebProjectOutputDir)" 
     Force="true" 
    /> 
    </Target> 
    <!-- ... --> 
</Project> 

Sie können festlegen auch TargetPath Attribut Zielverzeichnis angeben.

AfterTargets="build" ist ähnlich wie "Post-Build-Ereignis". Siehe Target Build Order für mehr.

+0

Diese Art von Arbeiten mit 'Force' auf' false' außer dem resultierenden Service-Paket festgelegt ist unverändert. – sharptooth

2

Integrieren ASPX Kompilierung in Visual Studio

Eines der Prinzipien, auf ich darauf bestehen, ist immer meine bauen auf einer sauberen Umgebung, um zu versuchen und Installation zu simulieren, als ob es von QA durchgeführt wurde. In letzter Zeit ist mir aufgefallen, dass ich immer wieder auf Fehler stoße, die tief in den aspx-Dateien versteckt sind. Warum also nicht das alte und vertraute Tool aspnet_compiler.exe verwenden? Es befindet sich unter C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 und es ist ziemlich einfach zu verwenden.

Als VS-Add-Ins-Freak habe ich angefangen, über ein erstaunliches Add-In nachzudenken, das in den VS integriert wird und auf Buildsereignisse hört und die Ergebnisse im Ausgabebereich anzeigt. Heck, warum nicht ein paar Kaffee Serving-Fähigkeiten hinzufügen?

Ich brauchte ungefähr 10 Minuten googeln um in diesem Blog zu stolpern. Mike Hadlow hatte ein Genie in seiner Einfachheit Idee. Verwenden Sie das POST BUILD EVENT! Alles, was ich tun muss, ist die folgende Zeile in das Post-Build-Ereignis: C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_compiler.exe -v/-p "$ (ProjectDir)"

Jetzt müssen wir nur noch den Vorgang des Hinzufügens dieser Zeile zu jedem Webprojekt in unserem Team automatisieren.

Ich habe nur die Add-In für die :)

enter link description here

0

Die Antwort von Matej war hilfreich für mich, aber ich war nicht in der Lage, es zu benutzen, wie sie ist und es nach wie vor an der Arbeit Sowohl für lokale Builds in Visual Studio als auch für automatisierte Builds über TFS.

Ich musste einige zusätzliche Msbuild-Einstellungen hinzufügen. Eigentlich gab es 2 verschiedene Szenarien, die ich hatte. Ein Projekt war eine Webanwendung, die in den Ordner _PublishedWebsites eingebaut wurde, und eine war eine MVC-Webanwendung, die nicht in den Ordner _PublishedWebsites eingebaut wurde.

Zuerst fügen Sie den folgenden, wenn es nicht bereits in der Projektdatei ist:

<PropertyGroup> 
    <MvcBuildViews>true</MvcBuildViews> 
    </PropertyGroup> 

Für den einen MIT _PublishedWebsites:

<Choose> 
    <When Condition="'$(BuildingInsideVisualStudio)' == true"> 
     <PropertyGroup> 
     <AspNetCompilerPhysicalPath>$(ProjectDir)</AspNetCompilerPhysicalPath> 
     </PropertyGroup> 
    </When> 
    <Otherwise> 
     <PropertyGroup> 
     <AspNetCompilerPhysicalPath>$(WebProjectOutputDir)</AspNetCompilerPhysicalPath> 
     </PropertyGroup> 
    </Otherwise> 
    </Choose> 
    <Target Name="PrecompileWeb" AfterTargets="build" Condition="'$(MvcBuildViews)'=='true'"> 
    <!-- aspnet_compiler.exe needs to be run on the folder that has the aspx files and the "bin" subfolder. 
      When running locally, the value needs to be the project directory, which is $(ProjectDir). 
      When running the TFS build, the value needs to be (BuildFolder)\(ProjectName)\_PublishedWebsites\(ProjectName). 
      The $(AspNetCompilerPhysicalPath) will hold the correct value for both types of builds. 
    --> 
    <Message Text="Starting AspNetCompiler for $(ProjectName) at $(AspNetCompilerPhysicalPath)" Importance="high" /> 
    <AspNetCompiler 
     VirtualPath="/" 
     PhysicalPath="$(AspNetCompilerPhysicalPath)" 
     TargetPath="$(AspNetCompilerPhysicalPath)\bin_precompile" 
     Force="true" 
     /> 
    </Target> 

Für einen OHNE _PublishedWebsites:

<Choose> 
    <When Condition="'$(BuildingInsideVisualStudio)' == true"> 
     <PropertyGroup> 
     <AspNetCompiler_CopyFilesFirst>false</AspNetCompiler_CopyFilesFirst> 
     </PropertyGroup> 
    </When> 
    <Otherwise> 
     <PropertyGroup> 
     <AspNetCompiler_CopyFilesFirst>true</AspNetCompiler_CopyFilesFirst> 
     </PropertyGroup> 
     <ItemGroup> 
     <AllOutputFiles Include="$(OutDir)\\**\*.*" /> 
     </ItemGroup> 
    </Otherwise> 
    </Choose> 
    <Target Name="PrecompileWeb" AfterTargets="build" Condition="'$(MvcBuildViews)'=='true'"> 
    <!-- aspnet_compiler.exe needs to be run on the folder that has the cshtml files and the "bin" subfolder. I could not find a setting that was appropriate for both. 
      When running locally, the value needs to be the project directory, which is $(ProjectDir). 
      When running the TFS build, there is no folder that matches both of those criteria. 
      So first we will copy the output into the source code folder's "bin" subfolder, 
      then run it against the source $(ProjectDir), the same as if we were building locally. 
    --> 
    <Message Text="Before running AspNetCompiler, copy files from $(OutDir) to $(ProjectDir)\bin" Importance="high" /> 
    <Exec Command="(robocopy.exe /mir $(OutDir) $(ProjectDir)\bin) ^&amp; IF %25ERRORLEVEL%25 LEQ 1 exit 0" Condition="'$(AspNetCompiler_CopyFilesFirst)'=='true'" /> 

    <Message Text="Starting AspNetCompiler for $(ProjectName) at $(ProjectDir)" Importance="high" /> 
    <AspNetCompiler 
     VirtualPath="/" 
     PhysicalPath="$(ProjectDir)" 
     TargetPath="$(ProjectDir)\bin_precompile" 
     Force="true" 
     /> 
    </Target> 
Verwandte Themen