是否有msbuild命令行的whatif开关?

时间:2018-06-13 17:05:01

标签: msbuild

我的构建服务器上运行了 msbuild 命令行。它是在使用开关whatif

构建之后部署的

部署时是否有针对 msbuild 的{{1}}开关?

1 个答案:

答案 0 :(得分:0)

有几种方法可以在持续集成中实现该问题。

自定义MSBuild任务

您可以创建自己的任务来实现ITask界面。您可以从帮助程序类Task派生任务并覆盖其Execute()方法。该解决方案最灵活。因此,可以将其他参数从命令行传递到deploing进程,或者根据构建配置对它们进行硬编码。

然后将任务添加到您的项目中:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <!-- Register the custom task -->
    <UsingTask TaskName="TaskNamespace.MyTask" AssemblyFile="path\to\task\assembly.dll"/>

    <!-- Define something -->

    <!-- Set properties for Debug configuration -->
    <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
        <WhatIf>true</WhatIf>
        <!-- Set another properties -->
    </PropertyGroup>

    <!-- Set properties for Release configuration -->
    <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
        <WhatIf>false</WhatIf>
        <!-- Set another properties -->
    </PropertyGroup>

    <Target Name="MyTarget">  
        <MyTask OnlyReport="$(WhatIf)"/>  
    </Target>  
</Project>

请参阅Task Writing文章中的详细信息。

不同的命令

可以使用msbuild构建项目并创建Web包,然后使用msdeploy .deploy.cmd 文件创建包部署的报告。例如

msbuild "MySolution.sln" /t:MyProject /p:Configuration="Release" /p:DeployOnBuild=true /p:PublishProfile="Local Package"
"path\to\MyProject.deploy.cmd" /T /M:"http://my-server.loc/MsDeployAgentService" /A:NTLM -allowUntrusted

第一个命令构建您的Web应用程序项目并创建本地Web部署包。请注意,它需要解决方案文件中的 Local Package 发布配置文件。

第二行使用msdeploy.exe标记调用–whatif。也可以直接使用msdeploy.exe。要获取详细信息,请参阅Deploying Web Packages

自动化Web程序包部署

以前的方法可以使用MSBuild的<Exec>任务自动完成。例如

<PropertyGroup>
    <DeployMode>T</DeployMode>
    <DeployMode Condition=" '$(Configuration)'=='Release' ">Y</DeployMode>
    <DestinationServer>http://my-server.loc</DestinationServer>
</PropertyGroup>
<Target Name="PublishWebPackages">
    <PropertyGroup>
        <DeployCommand>
          "path\to\MyProject.deploy.cmd" /$(DeployMode) /M:$(DestinationServer)/MsDeployAgentService /A:NTLM
        </DeployCommand>
    </PropertyGroup>
    <Exec Command="$(DeployCommand)"/>
</Target>

您还可以通过DeployMode命令DestinationServer开关传递msbuild/p:的值。

相关问题