我有一个部署到Azure的ASP.NET MVC Web应用程序。 VS 2013 Pro中的解决方案包含3个项目:
Web App项目
Webjob项目
一个Common项目,其中存储App和Webjob都通用的代码。
通过Add --> New Azure Webjob Project
上下文菜单将Webjob项目添加到主App项目中,该菜单实际上在同一解决方案内添加了一个新项目,这很好。
当我最初将应用程序发布到Azure时,也已经部署了Webjob,并且一切正常。 Webjob每天按计划运行一次。
现在,我对Webjob进行了一些本地更改,并需要发布这些更改。我遵循相同的过程来部署应用程序(rtClick main App --> Publish
),该应用程序也应提取对Webjob的更改,但是“预览”窗格未获取更改,并且随后未将更改发布到Webjob。
顺便说一句,我对Common项目所做的任何更改都被成功提取,因此,进行更改和发布Webjobs看起来有些怪异。
有人遇到过吗?
最佳答案
我已经找到问题的原因。它实际上很简单,但也很令人沮丧。
发布Web应用程序时,可以选择Remove additional files at destination
。我一直将此复选框保留为选中状态,因为我无缘无故不喜欢挂起旧文件。
您还可以选择Exclude files from the App_Data folder
,我也始终将其选中,以便根据上述删除配置,不会删除App_Data
中的文件。然后,我通常将诸如NLog日志文件,ELMAH xml文件等之类的内容配置为安全地放入App_Data
,因为其中不会删除任何内容。
因此,Webjobs的问题在于它们已部署到App_Data
中。因此,如果选中了Exclude files from App_Data folder
,则在发布应用程序时,它将按照提示执行操作,并忽略App_Data
,从而忽略对Webjob的更改。
因此,简单的解决方案是取消选中此选项,并且Webjob已成功部署。但是,现在的问题是App_Data
中的所有其他文件(日志文件等)将被删除。
因此,您可以取消选中“删除文件”配置,但这可能会留下其他不需要的文件。不理想。
另一个选项是保留remove config的状态,在发布之前单击Publish对话框中的Preview按钮,然后手动取消选中每个不想删除的文件。但是,如果要保留的任何文件位于App_Data
的子文件夹中,则发布过程将失败。 App_Data/logs
。
因此,另一个选择是将要保留在App_Data
中的所有文件移到App_Data
的根目录,然后在发布前在“预览”窗口中取消选中每个文件。一次完成并没有什么大不了的,但是在大量发布时变得乏味。
我知道我可以将日志文件等移动到Azure存储,SQL DB等中,但是如果其他文件在App_Data
中需要保留怎么办? App_Data
并非仅用于Webjobs,但是如果您还将App_Data
用于其他用途,则使用Webjobs会造成一些尴尬的情况。
渴望知道我是否在这里缺少任何明显的东西?
关于asp.net - 为什么在发布Web App时未获取对WebJob的更改?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34608759/