为什么在发布Web App时我的WebJob没有被更改?

时间:2016-01-05 09:57:10

标签: asp.net asp.net-mvc azure azure-web-sites azure-webjobs

我有一个部署到Azure的ASP.NET MVC Web App。 VS 2013 Pro中的解决方案有3个项目:

  • Web App项目
  • 一个Webjob项目
  • 一个Common项目,用于存储App和Webjob共有的代码。

Webjob项目已通过Add --> New Azure Webjob Project上下文菜单添加到主App项目中,该菜单实际上在同一解决方案中添加了一个新项目,这很好。

当我最初将应用程序发布到Azure时,Webjob也已部署,并且所有工作都按预期工作。 Webjob每天运行一次。

现在我已对Webjob进行了一些本地更改,并且需要发布这些更改。我按照相同的过程来部署应用程序(rtClick main App --> Publish),该应用程序也应该获取对Webjob的更改,但预览窗格没有获取更改,然后更改随后不会发布到Webjob。

顺便说一句,我对Common项目所做的任何更改都会成功获取,所以看起来有一些奇怪的做法是更改和发布Webjobs。

以前有人遇到过这个吗?

2 个答案:

答案 0 :(得分:7)

我找到了问题的原因。它实际上很简单但也非常令人沮丧。

发布网络应用时,您可以选择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中的所有其他文件都将被删除(日志文件等)。

因此,您可以取消选中删除文件配置,但这可能会留下其他不需要的文件。不理想。

另一个选项是选中删除配置,在发布之前单击“发布”对话框中的“预览”按钮,然后手动取消选中您不想删除的每个文件。但是,如果您要保留的任何文件位于App_Data内的子文件夹中,则发布过程将失败,例如App_Data/logs

因此,另一个选项是将App_Data中要保留的所有文件移动到App_Data的根目录中,然后在发布之前取消选中预览窗口中的每个文件。一次完成并不是一件大事,但在多次出版时变得乏味。

我意识到我可以将日志文件等移动到Azure存储,SQL数据库等,但是如果需要保留其他文件在App_Data中的话呢? App_Data并非仅适用于Webjobs,但如果您还将App_Data用于其他内容,则使用Webjobs会产生一些尴尬的情况。

想知道我在这里是否遗漏了什么?

答案 1 :(得分:0)

尝试发布到本地文件系统'在VS中,检查WebJobs文件是否成为该文件夹(在App_Data下)。如果可行,请尝试对WebJob进行更改,然后对同一文件夹执行增量发布。您可以找到有关此here的更多信息。

通常,无论您访问本地文件夹的文件集是什么,都将部署到您的Azure Web App。

如果在本地发生同样的问题,那么您的应用中的WebJobs NuGet包可能存在问题。您可以尝试检查NuGet更新。

你可以做的另一件事是进一步隔离是用WebJob创建一个新的干净的虚拟WebApp,看看你是否看到了同样的东西。这将有助于确定它是否特定于您的一个项目。