为什么在发布 Web 应用程序时对我的 WebJob 所做的更改没有被应用?

Why are changes to my WebJob not being picked up when publishing the Web App?

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

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

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

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

顺便说一句,我对 Common 项目所做的任何更改都已成功获取,因此看起来进行更改和发布 Webjobs 时有些奇怪。

有人遇到过这个吗?

尝试在 VS 中执行 'Publish to local file system',并检查 WebJobs 文件是否位于该文件夹(在 App_Data 下)。如果可行,请尝试对 WebJob 进行更改,然后对同一文件夹进行增量发布。您可以找到与此相关的更多信息 here.

通常,无论您获取到本地文件夹的什么文件集都会部署到您的 Azure Web 应用程序。

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

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

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

发布网络应用程序时,您可以选择 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 内的 sub-folders 内,则发布过程会失败,例如App_Data/logs.

因此,另一个选项是将 App_Data 中您想要保留的所有文件移动到 App_Data 的根目录中,然后在预览 window 中取消选中每个文件在发布之前。完成一次没什么大不了的,但发布很多次就会变得乏味。

我知道我可以将日志文件等移动到 Azure 存储、SQL 数据库等,但是如果 App_Data 中有其他文件需要保留怎么办? App_Data 不仅仅用于 Webjobs,但如果您还使用 App_Data 做其他事情,使用 Webjobs 会造成一些尴尬的情况。

想知道我是否遗漏了任何明显的东西?