2012-09-20 11 views
7

मैं विजुअल स्टूडियो को precompile my ASP.NET application पर चाहता हूं जिसका उपयोग एज़ूर वेब रोल पेलोड के रूप में किया जाता है। इसलिए मुझे this post मिला है जो बताता है कि विचारों को सत्यापित करने के लिए aspnet_compiler को कैसे कॉल करें।निर्माण के दौरान विजुअल स्टूडियो से एस्पनेट_कंपेलर कैसे प्राप्त किया जाए?

मैं निम्नलिखित जोड़ने की कोशिश की मेरी ASP.NET अनुप्रयोग के "बाद के निर्माण घटना" के लिए:

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

या वैकल्पिक रूप से इस (आवेदन स्पष्ट रूप से निर्दिष्ट नाम):

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

दोनों में जब निर्माण चलता है तो मैं बिल्ड आउटपुट में निम्नलिखित देखता हूं:

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

और स्पष्ट रूप से कोई पूर्व नहीं संकलन होता है क्योंकि अगर मैं किसी भी .aspx या .cshtml फ़ाइल को "एक्शन" में "कोई नहीं" बदलता हूं तो यह Azure सेवा पैकेज नहीं मिलता है और पैकेज को Azure पर तैनात किए जाने के बाद दृश्य अब खुलता नहीं है।

मैं विजुअल स्टूडियो के भीतर से प्रीकंपलिंग के लिए aspnet_compiler कैसे सेटअप करूं?

उत्तर

4

आप अपने दृश्य स्टूडियो के भीतर Asp.NET संकलक उपयोग करना चाहते हैं/MSBuild तो आप AspNetCompiler टास्क अपने प्रोजेक्ट फ़ाइल (.csproj/.vbproj) करने के लिए जोड़ सकते हैं और true को MvcBuildViews सेट कर सकते हैं।

उदाहरण:

<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> 

तुम भी गंतव्य निर्देशिका निर्दिष्ट करने के लिए TargetPath विशेषता सेट कर सकते हैं।

AfterTargets="build" "पोस्ट-बिल्ड इवेंट" के समान है। अधिक के लिए Target Build Order देखें।

+0

परिणामी सेवा पैकेज को छोड़कर 'फोर्स' सेट 'झूठी' के साथ इस तरह के काम अपरिवर्तित हैं। – sharptooth

2

दृश्य स्टूडियो

सिद्धांतों मैं हमेशा एक स्वच्छ वातावरण पर अपने निर्माण की कोशिश और स्थापना अनुकरण के रूप में अगर यह क्यूए द्वारा किया गया था करने के लिए है पर जोर देते हैं में से एक में ASPX संकलन एकीकृत करें। हाल ही में मैंने देखा है कि मैं एएसपीएक्स फ़ाइलों में गहरी छिपी हुई गलतियों पर पड़ता रहता हूं। तो, पुराने और परिचित aspnet_compiler.exe उपकरण का उपयोग क्यों नहीं करते? यह सी: \ विन्डोज़ \ Microsoft.NET \ Framework \ v2.0.50727 पर स्थित है और इसका उपयोग करना काफी आसान है।

एक वीएस ऐड-इन्स सनकी के रूप में मैंने एक अद्भुत ऐड-इन पर विचार करना शुरू कर दिया है जो वीएस को एकीकृत करेगा और घटनाओं को बनाने और आउटपुट फलक पर परिणाम प्रदर्शित करेगा। बिल्ली, कुछ कॉफी सेवा क्षमताओं क्यों नहीं जोड़ते हैं?

मुझे इस ब्लॉग पर ठोकर खाने के लिए लगभग 10 मिनट का गुस्सा आया। माइक हैडलो के सादगी विचार में एक प्रतिभा थी। पोस्ट निर्मित घटना का प्रयोग करें! मुझे बस पोस्ट बिल्ड इवेंट में निम्न पंक्ति डालना है: सी: \ विन्डोज़ \ माइक्रोसॉफ्ट.NET \ Framework \ v2.0.50727 \ aspnet_compiler.exe -v/-p "$ (ProjectDir) \"

अब, जो कुछ भी बचा है, वह हमारी टीम में प्रत्येक वेब प्रोजेक्ट को स्वचालित होने के लिए इस लाइन को जोड़ने की प्रक्रिया बनाना है।

मुझे लगता है कि के लिए में जोड़ने बस है :)

enter link description here

0

मेटि़ज से जवाब मेरे लिए उपयोगी था, लेकिन मैं के रूप में है इसका इस्तेमाल और अभी भी यह काम करने के लिए प्राप्त करने में सक्षम नहीं था स्थानीय स्टूडियो के भीतर स्थानीय निर्माण और टीएफएस के माध्यम से स्वचालित निर्माण के लिए।

मुझे कुछ अतिरिक्त एमएसबिल्ड सेटिंग्स जोड़नी पड़ीं। असल में, मेरे पास 2 अलग-अलग परिदृश्य थे। एक प्रोजेक्ट एक वेब ऐप था जो _PublishedWebsites फ़ोल्डर में बनाया गया था और एक एक एमवीसी वेब ऐप था जो _PublishedWebsites फ़ोल्डर में नहीं बनाया गया था।

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

_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> 

एक के लिए _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> 

पहले, निम्न अगर यह पहले से ही अपने प्रोजेक्ट फ़ाइल में नहीं है जोड़ने