5

シンプルなASP.NET Core Webアプリケーション(.NET Framework)を作成し、WebJobをAzureに公開したいと考えています。WebJobでシンプルなAsp.Net Core App(.Net Framework)を公開

私はVisual Studio 2017を使用していますが、結果はVS2015で同じようです。起動するには

、私はVS2017に対応するプロジェクトを作成します。

enter image description here

私は基本的なWebアプリケーションテンプレートを選択:私は少し失われ得る。この時点で

enter image description here

を。以前のAsp.Net MVC 5のアプローチでは、Asp.Netプロジェクトをクリックして、「Add => New Azure Webjobs Project」を見つけることができました。 WebJobは、出版時にリンクされ、ちょうど "仕事"にリンクされます。

新しいAsp.Netコアのアプローチでは、これを実現するための類似した簡単な方法を見つけることができないようです。

WebJobsプロジェクトをソリューションに手動で追加し、Webjobs-list.jsonファイルをAsp.Netプロジェクトに手動でセットアップしようとしましたが、パブリッシュステップで認識できませんでした。 this oneのようなさまざまな答えには、ファイルをコピーするための公開プロセスにフックすることをおすすめしますが、* .pubxmlファイルに追加されたマークアップは影響を受けませんでした(ファイルがコピーされていない)。

このタスクに関して、時代遅れの情報があるようです。誰かがVisual StudioでAsp.Net Coreアプリケーションを含む新しいソリューションのためにこれを行う現在のプロセスを詳しく説明できるでしょうか?

+1

Webjobs SDKを使用しようとしていますか?それはまだ.NETコアでは利用できません。 – lopezbertoni

+0

チップをありがとう!私はSDKを必ずしも必要としないと思う。たとえば、asp.netのコアプロジェクトを公開するためにwebjobファイルをコピーするために何をしなければならないかを誰かが知っていることを期待しています。おそらく、これを自動化する* .pubxmlを変更する方法があります... – sammy34

答えて

8

これは、VS 2015とproject.jsonでうまく動作します(VSTSからAzureに変更を加えずにビルドして展開することもできます)。VS 2017でちょっとした作品 - VSから公開期待どおりに動作しますが、追加のビルドステップを追加せずにVSTS上で動作させることはできませんでした。

VS 2015 + project.json

  1. 任意の追加のwebjob関連ファイルなしで、いつものようにWebアプリケーションプロジェクトを作成します。
  2. webjob用.NET Coreコンソールアプリケーションを作成します。
  3. Webアプリケーションプロジェクトのwebjobに必要なフォルダを作成します。 TheJobという名前の連続ウェブジョブの場合はApp_Data/Jobs/Continuous/TheJobでなければなりません。
  4. のような内容で上記のフォルダにrun.cmdファイルを追加します、Webプロジェクトのproject.jsonファイルで

    @echo off 
    The.Job.Project.Name.exe 
    
  5. を、次のスクリプトを追加:

    "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\\" 
        ] 
    } 
    

トリックは秒でありますスクリプト - webjobプロジェクトをWebアプリケーションのApp_Dataディレクトリに直接公開するので、Webサイトで公開されます。

VS2017 +。csproj

プロジェクトをVS 2017形式に変換した後、スクリプトは変換されていますが、残念ながら動作しません.Webジョブファイルは公開されません。

Web仕事を部分的に機能させる方法の1つは、Webアプリケーションの一時公開ディレクトリに公開することです。後でVSから公開されますが、残念ながらVisual Studioから直接公開するときにのみ機能します。 VSTSビルドでは動作しません。 、それを行うWebアプリケーションのプロジェクトファイルに次のセクションを追加するには

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

ありますあなたは、この使用してgitの展開を自動化する場合や、また、

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

が含まれ、あなたがサイトの下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.を得ることができます。 VSTSは、VS2017のcsprojを構築するため

Sample Working Webjob

0

あなたは、私はそれがこれらの行でローカルにVSTSを使用して、VS 2017 csprojを公開したりするために、すべての場合で動作し得ることをどうにか

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

このラインを使用することができます。

<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などの相対パスを使用すると、WebJobはWebプロジェクトの代わりに独自のbinフォルダに公開されます。
  • Webプロジェクトのものと同じ公開設定(RuntimeIdentifier、TargetFramework、Configuration)を使用しています。

希望に役立ちます!

関連する問題