我将ASP.NET MVC应用程序托管为Azure Cloud Service。
我在新部署后删除了用户上传的图片时遇到问题。
上传的图片会保存到自定义特殊文件夹WebProject/UserFiles/MedicalCenterImages
下面我提供了我的项目文件夹结构。
我发现并调查了几个与我的相关的问题
并弄清楚,我应该在.csproj文件中添加一个SkipDelete规则。
<Target Name="AddCustomSkipRules">
<Message Text="Adding Custom Skip Rules" />
<ItemGroup>
<MsDeploySkipRules Include="SkipUserFilesFolder">
<SkipAction>Delete</SkipAction>
<ObjectName>filePath</ObjectName>
<AbsolutePath>UserFiles</AbsolutePath>
</MsDeploySkipRules>
</ItemGroup>
</Target>
但我不完全明白我应该编辑哪个文件? (MaxPatient.Web.csproj或MaxPatientCloudService.ccproj或任何其他文件)
我总是发布我的MaxPatientCloudService项目。
我将不胜感激任何帮助。
谢谢:)
答案 0 :(得分:7)
Azure云服务部署通常(使用VIP交换到prod插槽的临时插槽)创建新的虚拟机(VM)。您只能计划实际MVC项目中的内容文件以部署到新VM。用户上传不会在部署后继续存在。您需要将上载的文件存储在Azure BLOB,数据库中或使用Azure网站而不是Cloud Service。
答案 1 :(得分:2)
每当您发布到Azure Cloud Service时,都会创建新VM。 如果我希望Azure不删除空文件夹,我通常会在文件夹中添加一个虚拟文件。
理想情况下,您希望惩罚分期。然后SWAP Staging with Production,以便最大限度地减少我们网站的停机时间。
此外,Azure Cloud Service中至少需要两个实例。一个实例无法访问其他实例中的文件夹。
上传的图片将保存到自定义特殊文件夹中 WebProject / UserFiles / MedicalCenterImages
对于方案,您需要在Blob Storage(或SQL Azure)中保存客户映像,以便所有实例都可以读取/写入映像。
注意: 当Azure回收实例时(无论出于何种原因),它会从原始上传的包中创建新的VM。因此,我们永远不应该将数据保存在Web服务器的文件夹中。
答案 2 :(得分:0)
转到发布设置 - &gt;展开文件发布选项 - &gt;并解开说明在目的地删除其他文件的框。
答案 3 :(得分:0)
我不确定这是否适用于持续部署,但是从VS手动部署的解决方案是将要保留的服务器文件放在App_Data文件夹中。
VS / Azure的标准发布设置允许您:
&#34;删除目的地的其他文件&#34; 和 &#34;排除App_Data文件夹中的文件&#34;
这意味着您可以清除项目中的冗余项目文件,而不会影响实时应用程序中特定的文件和数据
可能的缺点是限制公共访问App_Data以及将App_Data文件夹用于一般存储目的 - 另请参阅有关该问题的帖子。