MSbuild命令行参数用于跳过目录。

3
在Team City中,我有以下命令行参数用于部署。一切正常,但我想在部署时跳过某些目录。请问如何在以下的msbuild脚本中添加这个逻辑?
/P:Configuration=%env.Configuration%
/P:DeployOnBuild=True
/P:DeployTarget=MSDeployPublish
/P:MsDeployServiceUrl=https://%env.TargetServer%/MsDeploy.axd
/P:AllowUntrustedCertificate=True
/P:MSDeployPublishMethod=WMSvc
/P:CreatePackageOnPublish=True
/P:SkipExtraFilesOnServer=True
/P:UserName=xxxxx
/P:Password=xxxxx

我有一个后续问题:在VSTS中如何跳过VS Build中的一个目录? - Salman
3个回答

7

我正在做同样的事情。我不喜欢必须修改我的.csproj文件,所以我尝试了这个方法。到目前为止,对我来说它是有效的。在我的情况下,我是将媒体、App_Data\Logs和App_Data\preview文件夹从部署中排除,而不是Data文件夹。

基本上,你可以将ExcludeFoldersFromDeployment作为参数传递给MSBuild。与SkipExtraFilesOnServer结合使用就行了。

/p:Configuration=Debug
/p:DeployOnBuild=True
/p:DeployTarget=MSDeployPublish
/p:MsDeployServiceUrl=OurDevWebServer/msdeployagentservice
/p:AllowUntrustedCertificate=True
/p:MSDeployPublishMethod=RemoteAgent
/p:CreatePackageOnPublish=True
/p:DeployIisAppPath=umbraco_TestSite
/p:IgnoreDeployManagedRuntimeVersion=True
/p:SkipExtraFilesOnServer=True
/p:ExcludeFoldersFromDeployment="media;App_Data\Logs;App_Data\preview"
/p:IncludeSetAclProviderOnDestination=False
/p:AuthType=NTML /p:UserName=

1

实际上我已经在我的项目中按以下方式实现了这个:

<ItemGroup>
        <MsDeploySkipRules Include="SkipDeleteApp_Data_Import">
            <SkipAction></SkipAction>
            <ObjectName>dirPath</ObjectName>
            <AbsolutePath>$(_Escaped_WPPAllFilesInSingleFolder)\\App_Data\\Import</AbsolutePath>
        </MsDeploySkipRules>
    </ItemGroup>
    <ItemGroup>
        <MsDeploySkipRules Include="SkipDeleteApp_Data_File">
            <SkipAction></SkipAction>
            <ObjectName>filePath</ObjectName>
            <AbsolutePath>$(_Escaped_WPPAllFilesInSingleFolder)\\App_Data\\en-US-custom.txt</AbsolutePath>
        </MsDeploySkipRules>
    </ItemGroup>

1

您无法通过命令行指定 WPP 跳过规则,因为它们被声明为项目而不是属性。

以下是在您的 pubxml(或 wpp.targets)中声明跳过规则的语法:

<ItemGroup>
  <MsDeploySkipRules Include="SkipErrorLogFolder1"> 
    <SkipAction>Delete</SkipAction> 
    <ObjectName>filePath</ObjectName> 
    <AbsolutePath>ErrorLog</AbsolutePath> 
  </MsDeploySkipRules> 
</ItemGroup>

谢谢回复。我会尝试并让您知道。 - user1200750
我已将您的代码添加到我的wpp.targets中,并从Team City运行了上述命令,但结果相同,它没有跳过文件夹名称Data。当我尝试从VS 2012运行时,它会给我以下错误 MSDEPLOY(0,0):错误:未识别的参数“Web”。所有参数都必须以“-”开头。 - user1200750
1
Richard,感谢你的帮助,我找到了另一种解决方法,在.csproj文件中添加了以下代码 <ExcludeFoldersFromDeployment>Data</ExcludeFoldersFromDeployment> ,对我很有效。 - user1200750
@user1200750 - 你应该将其作为单独的答案添加并标记为正确。 - Richard Szalay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接