sam*_*y34 5 azure-web-sites azure-webjobs visual-studio-2015 asp.net-core visual-studio-2017
我想创建一个简单的ASP.NET核心Web应用程序(.NET Framework)并将WebJob与它一起发布到Azure.
我正在使用Visual Studio 2017,但结果在VS2015中似乎是相同的.
首先,我在VS2017中创建相应的项目:
我选择了基本的Web应用程序模板:
此时我有点失落.在旧的Asp.Net MVC 5方法中,我曾经能够点击Asp.Net项目并找到"Add => New Azure Webjobs Project".然后,WebJob将始终在发布中链接并且只是"工作".
使用新的Asp.Net Core方法,我似乎无法找到一种类似的简单方法来实现这一点.
我尝试手动将WebJobs项目添加到解决方案中,然后在Asp.Net项目中手动设置webjobs-list.json文件,但发布步骤无法识别它.我注意到像这样的各种答案建议挂钩到发布过程来复制文件,但添加到*.pubxml文件的标记没有任何影响(即文件没有被复制).
关于这项任务似乎有一些过时的信息.有人能够详细说明在Visual Studio中包含Asp.Net Core应用程序的新解决方案的当前过程吗?
小智 8
有一种方法可以做到这一点,它适用于VS 2015和project.json(甚至允许你从VSTS构建和部署到Azure而不做任何修改),并且有点适用于VS 2017 - 从VS发布按预期工作,但是如果不添加一些额外的构建步骤,我就无法使其在VSTS上运行.
App_Data/Jobs/Continuous/TheJob.将run.cmd文件添加到上面的文件夹,内容如下:
@echo off
The.Job.Project.Name.exe
Run Code Online (Sandbox Code Playgroud)在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\\"
]
}
Run Code Online (Sandbox Code Playgroud)诀窍在于第二个脚本 - 它将webjob项目直接发布到Web应用程序的App_Data目录中,因此它随网站发布.
将项目转换为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>
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你 :)
小智 6
我设法让它在所有情况下都可以使用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>
Run Code Online (Sandbox Code Playgroud)
它确保:
dotnet publish -o选项时可能会错过).dotnet publish [project]现在使用更改当前目录,因此使用默认/bin/[configuration]/[framework]/publish的相对路径,WebJob将在其自己的bin文件夹而不是Web项目中发布).希望有所帮助!
| 归档时间: |
|
| 查看次数: |
1850 次 |
| 最近记录: |