5

我想創建一個簡單的ASP.NET核心Web應用程序(.NET Framework)並將WebJob發佈到Azure。使用WebJob發佈簡單的Asp.Net核心應用程序(.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項目到解決方案,然後在Asp.Net項目中手動設置webjobs-list.json文件,但發佈步驟無法識別它。我注意到了諸如this one之類的各種答案,這些答案建議掛鉤到發佈過程來複制文件,但添加到* .pubxml文件的標記沒有任何影響(即文件未被複制)。

似乎有關於此任務的過時信息有點兒。可能有人能夠詳細說明在Visual Studio中爲包含Asp.Net Core應用程序的新解決方案執行此操作的當前流程?

+1

你想使用Webjobs SDK嗎?這還不適用於.NET Core。 – lopezbertoni

+0

感謝您的提示!我想我不一定需要SDK。例如,我希望有人可能知道爲了使用asp.net核心項目進行發佈而複製webjob文件需要做些什麼。也許有一種方法來修改* .pubxml自動執行此操作... – sammy34

回答

8

有一種方法可以做到這一點,它適用於VS 2015和project.json(甚至可以讓您無需任何修改即可從VSTS構建和部署到Azure),並且可以在VS 2017中運行 - 從VS發佈按預期工作,但我沒有設法使其在VSTS上工作,而無需添加一些額外的構建步驟。

VS 2015年+ project.json

  1. 創建Web應用程序項目和往常一樣,沒有任何附加webjob相關的文件。
  2. 爲webjob創建.NET Core控制檯應用程序。
  3. 在web應用程序項目中爲webjob創建必要的文件夾。對於名爲TheJob的連續網絡作業,它應該是App_Data/Jobs/Continuous/TheJob
  4. run.cmd文件添加到上述文件夾中的內容,如:

    @echo off 
    The.Job.Project.Name.exe 
    
  5. 在Web項目的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\\" 
        ] 
    } 
    

的訣竅是在第二腳本 - 它將webjob項目直接發佈到Web應用程序的App_Data目錄中,以便與網站一起發佈。

VS 2017 +。csproj

將項目轉換爲VS 2017格式後,腳本正在轉換,但不幸的是不起作用,webjob文件未發佈。

我發現使其部分工作的一種方式是將webjob發佈到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文件。

有一個工作示例here.

爲了這項工作,確保您添加run.cmd文件到您的WebJob項目:

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

您還需要修改您的.csproj並且包括

<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 /部署小工具/工具幷包含此行。

:: 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這些線發佈VS 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等相對路徑,WebJob將發佈在其自己的bin文件夾中,而不是Web項目的文件夾中)。
  • 我們使用與Web項目相同的發佈配置(RuntimeIdentifier,TargetFramework,Configuration)。

希望有幫助!

相關問題