WebJob

5

के साथ सरल Asp.Net कोर अनुप्रयोग (नेट फ्रेमवर्क) प्रकाशित करें मैं एक साधारण ASP.NET कोर वेब अनुप्रयोग (.NET फ्रेमवर्क) बना सकते हैं और Azure करने के लिए इसे के साथ एक WebJob प्रकाशित करना चाहते हैं।WebJob

मैं दृश्य स्टूडियो 2017 का उपयोग कर रहा है, लेकिन परिणाम VS2015 में एक ही हो रहा है।

शुरू करने के लिए, मैं VS2017 में इसी प्रोजेक्ट बनाते हैं:

enter image description here

मैं बुनियादी वेब अनुप्रयोग टेम्पलेट का चयन करें:

enter image description here

इस बिंदु पर मैं थोड़ा खो मिलता है। पुराने Asp.Net MVC 5 दृष्टिकोण में, मैं Asp.Net प्रोजेक्ट पर क्लिक करने और "Add => नई Azure Webjobs प्रोजेक्ट" ढूंढने में सक्षम होता था। WebJob हमेशा प्रकाशन में और केवल "काम" में जुड़ा होगा।

नई Asp.Net कोर दृष्टिकोण के साथ

, मैं हो रहा प्राप्त करने के लिए एक तुलनात्मक रूप से आसान रास्ता खोज नहीं कर पा रहे।

मैंने समाधान में वेबजब्स प्रोजेक्ट मैन्युअल रूप से जोड़ने की कोशिश की और फिर मैन्युअल रूप से Webjobs-list.json फ़ाइल को Asp.Net प्रोजेक्ट में सेट अप करने का प्रयास किया, लेकिन प्रकाशित चरण इसे पहचान नहीं पाया। मैंने this one जैसे विभिन्न उत्तरों को देखा जो फाइलों की प्रतिलिपि बनाने के लिए प्रकाशन प्रक्रिया में हुकिंग का सुझाव देते हैं, लेकिन * .pubxml फ़ाइल में जोड़े गए मार्कअप पर कोई प्रभाव नहीं पड़ा (यानी फाइलों की प्रतिलिपि नहीं बनाई जा रही थी)।

ऐसा लगता है पुरानी जानकारी का एक सा चारों ओर इस कार्य के बारे में नहीं है कि। क्या कोई विजुअल स्टूडियो में एएसपी.Net कोर ऐप वाले नए समाधान के लिए ऐसा करने की वर्तमान प्रक्रिया को विस्तारित करने में सक्षम हो सकता है?

+1

क्या आप वेबबॉज एसडीके का उपयोग करने की कोशिश कर रहे हैं? यह अभी तक .NET कोर के लिए उपलब्ध नहीं है। – lopezbertoni

+0

टिप के लिए धन्यवाद! मुझे लगता है कि मुझे जरूरी नहीं कि एसडीके की आवश्यकता हो। उदाहरण के लिए, मुझे आशा है कि किसी को पता चलेगा कि एएसपीनेट कोर प्रोजेक्ट के साथ प्रकाशित करने के लिए वेबबॉज फाइलों की प्रतिलिपि बनाने के लिए क्या करना है। शायद इसे स्वचालित करने के लिए * .pubxml को संशोधित करने का एक तरीका है ... – sammy34

उत्तर

8

ऐसा करने का एक तरीका है, यह वीएस 2015 और प्रोजेक्ट.जेसन के साथ ठीक काम करता है (और आपको बिना किसी संशोधन के वीएसटीएस से एज़ूर बनाने और तैनात करने की अनुमति देता है), और वीएस 2017 में थोड़े काम करता है - वीएस से प्रकाशित अपेक्षित काम करता है, लेकिन मैंने कुछ अतिरिक्त बिल्ड चरणों को जोड़ने के बिना इसे VSTS पर काम करने का प्रबंधन नहीं किया।

वी.एस. 2015 + project.json

  1. हमेशा की तरह वेब अनुप्रयोग प्रोजेक्ट बना, किसी भी अतिरिक्त webjob संबंधित फाइलों के बिना।
  2. वेबjob के लिए .NET कोर कंसोल ऐप बनाएं।
  3. वेब ऐप प्रोजेक्ट में वेबबेज के लिए आवश्यक फ़ोल्डर्स बनाएं। TheJob नामक निरंतर वेबबेज के लिए यह App_Data/Jobs/Continuous/TheJob होना चाहिए।
  4. की तरह सामग्री के साथ ऊपर फ़ोल्डर में run.cmd फ़ाइल जोड़ें:

    @echo off 
    The.Job.Project.Name.exe 
    
  5. वेब परियोजना के project.json फ़ाइल में जोड़ने के निम्न स्क्रिप्ट:

    "scripts": { 
        "postpublish": [ 
        "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%", 
        "dotnet publish ..\\Web.Job.Project.Name\\ -o %publish:OutputPath%\\app_data\\jobs\\continuous\\TheJob\\" 
        ] 
    } 
    

चाल दूसरे में है स्क्रिप्ट - यह वेब ऐप की ऐप_Data निर्देशिका में सीधे वेबोज़ प्रोजेक्ट प्रकाशित करती है, इसलिए यह वेबसाइट के साथ प्रकाशित हो जाती है।

वीएस 2017 +।csproj

परियोजनाओं को वीएस 2017 प्रारूप में परिवर्तित करने के बाद, स्क्रिप्ट परिवर्तित हो रही हैं, लेकिन दुर्भाग्य से काम नहीं करते हैं, वेबबॉज फाइलें प्रकाशित नहीं होती हैं।

एक तरीका मैंने इसे आंशिक रूप से काम करने के लिए पाया है वेबपेज को अस्थायी प्रकाशन निर्देशिका में प्रकाशित करना है, इसलिए इसे बाद में उठाया जाता है और वीएस से प्रकाशित किया जाता है, लेकिन दुर्भाग्यवश यह केवल विजुअल स्टूडियो से प्रकाशित होने पर ही काम करता है। यह वीएसटीएस बिल्ड के साथ काम नहीं करता है।

यह करने के लिए, वेब एप्लिकेशन की परियोजना फाइल करने के लिए खंड निम्नलिखित जोड़ें:

<Target Name="PostpublishScript" AfterTargets="Publish"> 
    <Exec Command="dotnet publish ..\Web.Job.Project.Name\ -o $(ProjectDir)obj\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\PubTmp\Out\App_Data\Jobs\Continuous\TheJob" /> 
</Target> 

आशा है कि यह मदद करता है :)

2

टॉमस 'जवाब देने के लिए जोड़ने के लिए, आप इस Git का उपयोग कर स्थापित करने के लिए चाहते हैं, तो तैनात करें, आपको अपने Azure WebApp के अंदर deploy.cmd फ़ाइल को संशोधित करने की आवश्यकता है।

@echo off 
dotnet SampleWebJob.dll (you can change this to run an .exe if you want to) 

आप भी अपनी .csproj संशोधित करने की आवश्यकता:

इस काम करने के लिए, सुनिश्चित करें कि आप अपने WebJob परियोजना के लिए एक run.cmd फ़ाइल जोड़ने बनाने के लिए आदेश में एक काम उदाहरण here.

है और

<Target Name="PostpublishScript" AfterTargets="Publish"> 
    <Exec Command="dotnet publish ..\SampleWebJob\ -o $(ProjectDir)obj\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\PubTmp\Out\App_Data\Jobs\Continuous\SampleWebJob" /> 
</Target> 

भी शामिल करें, अगर आप इस का उपयोग कर Git तैनाती स्वचालित करना चाहते हैं, तो आप साइट के अंतर्गत deploy.cmd संशोधित करने की आवश्यकता/तैनात ments/tools और इस लाइन को शामिल करें।

:: 2.1 Build and publish WebJobs 
echo Building and deploying Radius365.WebJob 
call :ExecuteCmd dotnet publish "SampleWebJob\SampleWebJob.csproj" -o "%DEPLOYMENT_TEMP%\App_Data\Jobs\Continuous\SampleWebJob" -c Release 

आप अधिक जानकारी के here. और here.

आशा इस मदद करता है प्राप्त कर सकते हैं।

Sample Working Webjob

0

आप VSTS VS2017 csproj बनाता है के लिए इस लाइनों का उपयोग कर सकते

<Target Name="PostpublishScript" AfterTargets="Publish"> 
    <Exec Command="dotnet publish ..\SampleWebJob\ -o $(PublishDir)App_Data\Jobs\Continuous\SampleWebJob" /> 
    </Target> 
5

मैं यह सब मामलों में काम करता है इन पंक्तियों के साथ VSTS का उपयोग कर वी.एस. 2017 csproj प्रकाशित या स्थानीय स्तर पर करने के लिए पाने में कामयाब रहे:

<Target Name="PrepublishScript" BeforeTargets="PrepareForPublish"> 
    <PropertyGroup> 
    <!-- Ensure any PublishDir has a trailing slash, so it can be concatenated --> 
    <PublishDir Condition="!HasTrailingSlash('$(PublishDir)')">$(PublishDir)\</PublishDir> 
    </PropertyGroup> 

    <PropertyGroup> 
    <PublishDirFullPath>$([System.IO.Path]::GetFullPath('$(PublishDir)'))</PublishDirFullPath> 
    </PropertyGroup> 
</Target> 

<Target Name="PostpublishScript" AfterTargets="Publish"> 
    <Exec Command="dotnet publish ..\SampleWebJob\ -r $(RuntimeIdentifier) -f $(TargetFramework) -c $(Configuration) -o $(PublishDirFullPath)App_Data\jobs\continuous\SampleWebJob\" /> 
</Target> 

यह सुनिश्चित करता है:

  • PublishDir का पिछला स्लैश है (dotnet publish -o विकल्प का उपयोग करते समय याद आ सकता है)।
  • हम पूर्ण पथ का उपयोग कर रहे हैं (पिछले संस्करणों के विपरीत, dotnet publish [project] का उपयोग कर वर्तमान निर्देशिका को बदलें, इसलिए डिफ़ॉल्ट /bin/[configuration]/[framework]/publish जैसे सापेक्ष पथ के साथ वेबजोब वेब प्रोजेक्ट के बजाय अपने स्वयं के बिन फ़ोल्डर में प्रकाशित किया जाएगा)।
  • हम वेब प्रोजेक्ट के मुकाबले एक ही प्रकाशित कॉन्फ़िगरेशन (रनटाइम इंडेंटिफायर, टार्गेटफ्रेमवर्क, कॉन्फ़िगरेशन) का उपयोग कर रहे हैं।

आशा है कि मदद करता है!

संबंधित मुद्दे