如何使用MSBuild避免使用MSDeploy到文件系统的这种深层文件夹结构?

cen*_*cru 24 msbuild teamcity msdeploy webdeploy

我正在解决这个MSBuild问题.

我们正在使用TeamCity构建一个包含两个MVC网站的解决方案.作为构建的一部分,我们将部署到构建服务器上的文件夹中.IIS指向此文件夹,以便为管理层提供可见的集成构建.

这是MSBuild文件中使用MSDeploy发布包的代码 - 但不是zip文件.

<Target Name="Deploy">
  <MSBuild 
    Projects="$(SolutionFile)"
    Properties="Platform=$(Platform);Configuration=$(Configuration);
    DeployOnBuild=true;
    DeployTarget=Package;
    PackageLocation=$(PackageLocation);
    PackageAsSingleFile=False;
    AutoParameterizationWebConfigConnectionStrings=False" />
</Target>
Run Code Online (Sandbox Code Playgroud)

这里的问题是我们得到了一个非常深的文件夹结构.这是一个例子......

C:\ DEPLOY\Archive\Content\C_C\Users\Edmond\Documents\Visual Studio 2008\CreatioGreen\Creatio\Code\core\trunk\Website\Website\obj\Release\Package\PackageTmp [已发布文件]

我真的想部署到可预测的文件夹,如...

C:\ build\website [已发布文件] C:\ build\mobilewebsite [已发布文件]

这就是背景.以下是具体问题.

  1. 我们在尝试使用MSDeploy发布到本地文件系统时犯了错误吗?我们基本上需要相当于VS2010"发布"功能,配置转换.我们不是要尝试部署到远程IIS实例或任何东西.

  2. 有没有办法这样做,但指定发布文件夹?

  3. 我一直在尝试使用MSBuild Copy任务将文件复制到更合理的文件夹中 - 但我无法弄清楚如何使用通配符来指定我们需要采取的文件夹 - 它需要像...

C:\ FolderPackageEndsUpIn [ANYFOLDERS]\Website [ANYFOLDERS]\PackageTmp**.

救命!

Cia*_*ill 27

如果将_PackageTempDir参数添加到MSBuild,它将为您提供与执行本地发布相同的结果.例如

msbuild C:\ PathToMyProj.csproj/p:Configuration = UAT; DeployOnBuild = true; PackageAsSingleFile = False; DeployTarget = Package; _PackageTempDir = c:\ PathToMyDeploy \; AutoParameterizationWebConfigConnectionStrings = false

此命令将我的所有文件发布到c:\ PathToMyDeploy \而没有疯狂的子文件夹


kat*_*roh 4

您可以直接使用 WebDeploy 来获得更优化的结果。例如,您可以使用以下命令直接同步 2 个文件夹的根目录到根目录:

>"%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:dirPath=<SourceFolder> -dest:dirPath=<DestinationFolder>

或者,您可以使用 iisApp 提供程序而不是 dirPath 使 WebDeploy 在目标上包含 IIS 配置:

>"%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:iisApp=<SourceFolderOrIISPath> -dest:iisApp=<DestinationFolderOrIISPath>

例如,要从简单文件夹同步到默认网站下的新应用程序“NewApp”,您可以这样调用它:

>"%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:iisApp="d:\MyWebSite" -dest:iisApp="Default Web Site/NewApp"

然后,您可以拥有一个批处理文件,该文件将通过直接调用 WebDeploy 来执行同步/打包,并将作为构建后事件执行。