如何使用MSBuild将MSDeploy转换为文件系统来避免这种深层文件夹结构?
我正在为这个MSBuild问题发牢骚 我们正在使用TeamCity构建一个包含两个MVC网站的解决方案。作为构建的一部分,我们将部署到构建服务器上的文件夹中。IIS指向此文件夹,为我们提供管理层可见的集成构建 以下是MSBuild文件中的代码,该文件使用MSDeploy发布包,但不是作为zip文件发布如何使用MSBuild将MSDeploy转换为文件系统来避免这种深层文件夹结构?,msbuild,teamcity,msdeploy,webdeploy,Msbuild,Teamcity,Msdeploy,Webdeploy,我正在为这个MSBuild问题发牢骚 我们正在使用TeamCity构建一个包含两个MVC网站的解决方案。作为构建的一部分,我们将部署到构建服务器上的文件夹中。IIS指向此文件夹,为我们提供管理层可见的集成构建 以下是MSBuild文件中的代码,该文件使用MSDeploy发布包,但不是作为zip文件发布 <Target Name="Deploy"> <MSBuild Projects="$(SolutionFile)" Properties="Platfor
<Target Name="Deploy">
<MSBuild
Projects="$(SolutionFile)"
Properties="Platform=$(Platform);Configuration=$(Configuration);
DeployOnBuild=true;
DeployTarget=Package;
PackageLocation=$(PackageLocation);
PackageAsSingleFile=False;
AutoParameterizationWebConfigConnectionStrings=False" />
</Target>
这里的问题是我们得到了一个非常深的文件夹结构。这里有一个例子
C:\DEPLOY\Archive\Content\C\U C\Users\Edmond\Documents\Visual Studio 2008\CreatioGreen\Creatio\Code\core\trunk\Website\Website\obj\Release\Package\PackageTmp[已发布文件]
我真的很想部署到可预测的文件夹,如
C:\build\website[已发布文件]
C:\build\mobilewebsite[已发布文件]
这就是背景。以下是具体问题
救命啊 您可以直接使用WebDeploy获得更优化的结果。例如,您可以使用以下命令将2个文件夹直接同步到根目录:
%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe”-动词:sync-source:dirPath=-dest:dirPath=
或者,您可以使用iisApp提供程序而不是dirPath,使WebDeploy在目标上包含IIS配置:
%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe”-动词:sync-source:iisApp=-dest:iisApp=
例如,要从简单文件夹同步到默认网站下的新应用程序“NewApp”,您可以这样称呼它:
%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe”-动词:sync-source:iisApp=“d:\MyWebSite”-dest:iisApp=“Default Web Site/NewApp”
然后,您可以拥有一个批处理文件,该批处理文件将通过直接调用WebDeploy执行同步/打包,并将作为生成后事件执行。如果将_-PackageTempDir参数添加到MSBuild,则会得到与本地发布相同的结果。e、 g msbuild C:\PathToMyProj.csproj/p:Configuration=UAT;DeployOnBuild=true;PackageAsSingleFile=False;部署目标=包_PackageTempDir=c:\PathToMyDeploy\;AutoParameterizationWebConfigConnectionStrings=false
此命令将把我的所有文件发布到c:\PathToMyDeploy\中,而不使用疯狂的子文件夹有一个稍微隐藏但优雅的解决方案 在共享CI服务器上运行生成时,由于隔离原因,可能很难将其打包到c:root中。人们最终更愿意删除包本身中的深层路径 幸运的是,有一个解决办法。在.pubxml文件中添加替换规则!我在《ms build engine内部》第二版的补充资料中找到了它:
我也在这个博客中找到了它:谢谢你的回答,卡特罗!这很有帮助。我一直这样做,直到我发现我无法让Web.config转换工作。您知道如何在不使用包目标的情况下实现这一点吗?您可以通过创建一个跳过替换规则来解决Web.config转换的问题,该规则将使Web部署跳过同步Web.config并将Web.release.config替换为Web.config。下面是一篇关于跳过替换规则的博客文章,让您开始:我如何在Azure CD管道中实现这一点?