cvo*_*cvo 6 msbuild asp.net-mvc webdeploy microsoft-web-deploy angular
我们在Angular 5上有一个带有ASP.NET后端的单页应用程序,当我们编译它时,Angular的发布内容被输出到文件夹"Project\dist".
这在本地开发机器上运行良好,但所有dist文件都随机分配了不同的名称,例如:
当我们使用Web发布部署到登台或生产时,一切都很好地传输,并且发布配置文件中的自定义文件夹被包含和发布.
但是,在目标服务器(暂存或生产)上,这些旧的,随机命名的文件和旧的(不再使用的)文件夹仍然存在.这导致在登台和生产服务器上累积了数百个数百个旧文件(来自旧的Web部署).每次我们使用webdeploy推送更新时,我都需要一种自动删除它们的方法.
理想情况下,工作流程是:
这是我们当前发布配置文件的编辑版本:
<?xml version="1.0" encoding="utf-8"?>
<!--
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
by editing this MSBuild file. In order to learn more about this please visit http://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>MSDeploy</WebPublishMethod>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<MSDeployServiceURL>staging.example.com</MSDeployServiceURL>
<DeployIisAppPath>Project</DeployIisAppPath>
<RemoteSitePhysicalPath />
<SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>
<MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
<EnableMSDeployBackup>False</EnableMSDeployBackup>
<UserName>WebDeployUser</UserName>
<PublishDatabaseSettings>
<Objects xmlns="">
</Objects>
</PublishDatabaseSettings>
<ADUsesOwinOrOpenIdConnect>False</ADUsesOwinOrOpenIdConnect>
</PropertyGroup>
<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="..\Project\dist\**\*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>dist\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几个已接受的答案解决方案,但无法使其工作:
有任何想法吗?除了在IIS中设置之外,我对Web部署基本上没有任何了解.
最好,克里斯
编辑我也试过这个:(基于此:https://stackoverflow.com/a/15113445/559988)
<Target Name="CleanFolder">
<PropertyGroup>
<TargetFolder>$(_MSDeployDirPath_FullPath)\dist</TargetFolder>
</PropertyGroup>
<ItemGroup>
<FilesToClean Include="$(TargetFolder)\**\*"/>
<Directories Include="$([System.IO.Directory]::GetDirectories('$(TargetFolder)', '*', System.IO.SearchOption.AllDirectories))"
Exclude="$(TargetFolder)"/>
</ItemGroup>
<Delete Files="@(FilesToClean)" ContinueOnError="true"/>
<RemoveDir Directories="@(Directories)" />
</Target>
Run Code Online (Sandbox Code Playgroud)
更新 这是我们正在做的事情:https://docs.microsoft.com/en-us/aspnet/web-forms/overview/deployment/visual-studio-web-deployment/deploying-extra-files
第一个评论是我们遇到的同样问题:只要SPA和后端共享同一个虚拟应用程序,这在部署Angular分发文件和ASP.Net后端时非常方便.遗憾的是,由于浏览器缓存破坏技术,Angular部署的捆绑文件将始终附带唯一的名称,因此,在发送更新的文件之前,msbuild命令/属性或在IIS端擦除文件夹清理的其他可能性非常大欢迎.如果有人找到了办法,请分享.
这里描述的msdeploy"同步"功能正是我们需要做的,但我不知道如何勾选到这个:https: //docs.microsoft.com/en-us/previous-versions/windows/it-亲/ Windows的服务器-2008-R2-和-2008/dd569034(v = ws.10)#sync
在同步操作中,如果目标上不存在源文件或文件夹,则提供程序将创建文件夹以及具有相应文件和属性的所有子文件夹.如果目标文件夹已存在,则提供程序仅更新与源不匹配的对象.这意味着在某些情况下,只会更新一个文件或文件夹.将删除源上不存在的目标文件.contentPath的源文件夹和目标文件夹不必具有相同的名称.如果目标文件夹的名称与源文件夹的名称不同,则目标文件夹的名称将保持不变,但文件夹的内容将更新为源文件夹的内容.
如果我理解正确,那么解决此问题是DeleteExistingFiles发布配置文件中的帮助属性。
<DeleteExistingFiles>True</DeleteExistingFiles>
Run Code Online (Sandbox Code Playgroud)
如果设置为True,输出目录 ( publishUrl ) 将在输出写入之前被清除,最好从头开始。
我如何将其应用到特定文件夹,例如。只删除“Project\dist”文件夹?
据我所知,此属性的结果是删除所有文件。对于指定要删除的目录,您可以尝试 verb deletefrom MSDeploy,它可以包装在<Exec>自定义脚本的任务中:
<Exec Command="$(MSDeploy) -verb:delete -dest:"ContentPath=D:\TestDir\Test.txt""/>
/*
* $(MSDeploy) is path to MSDeploy binary that you passed to script.
*/
Run Code Online (Sandbox Code Playgroud)
此示例显示删除本地计算机上的文件。您应该自定义自己的呼叫。
执行任务| 如何在发布 ClickOnce 项目时创建 Web 部署包(使用目标的一些片段)
| 归档时间: |
|
| 查看次数: |
1252 次 |
| 最近记录: |