我有一个部署到Azure的ASP.NET MVC Web App。 VS 2013 Pro中的解决方案有3个项目:
Webjob项目已通过Add --> New Azure Webjob Project
上下文菜单添加到主App项目中,该菜单实际上在同一解决方案中添加了一个新项目,这很好。
当我最初将应用程序发布到Azure时,Webjob也已部署,并且所有工作都按预期工作。 Webjob每天运行一次。
现在我已对Webjob进行了一些本地更改,并且需要发布这些更改。我按照相同的过程来部署应用程序(rtClick main App --> Publish
),该应用程序也应该获取对Webjob的更改,但预览窗格没有获取更改,然后更改随后不会发布到Webjob。
顺便说一句,我对Common项目所做的任何更改都会成功获取,所以看起来有一些奇怪的做法是更改和发布Webjobs。
以前有人遇到过这个吗?
答案 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,看看你是否看到了同样的东西。这将有助于确定它是否特定于您的一个项目。