所以这就是交易:我有一个由众多项目组成的Visual Studio解决方案。其中两个项目是Web应用程序项目。在这两个中,我希望在成功构建/测试运行之后,让TFS构建将其中一个部署到我们的开发服务器。
要使Web应用程序部署,我更新了.csproj的部署目标,使其如下所示:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DeployOnBuild>true</DeployOnBuild>
<DeployTarget>MsDeployPublish</DeployTarget>
<CreatePackageOnPublish>true</CreatePackageOnPublish>
<MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
<MSDeployServiceUrl>https://192.168.21.79</MSDeployServiceUrl>
<DeployIisAppPath>DeploymentTest</DeployIisAppPath>
<UserName>deploy</UserName>
<Password>sosecure</Password>
<AllowUntrustedCertificate>true</AllowUntrustedCertificate>
<SkipExtraFilesOnServer>true</SkipExtraFilesOnServer>
</PropertyGroup>
通过此配置,我的Web应用程序已成功部署到服务器。不幸的是,有一个小问题。由于进入这里过于令人沮丧的原因(并且在一天结束时,可能无法更改),当部署运行并将应用程序推送到我们的服务器时,会有一个CSS文件我需要跳过的项目。也就是说,我希望文件的服务器副本保持不变,即使它与项目中的内容不同。
为了支持这一要求,我将以下内容添加到我的.csproj中:
<PropertyGroup>
<OnBeforePackageUsingManifest>AddSkipRules</OnBeforePackageUsingManifest>
</PropertyGroup>
<Target Name="AddSkipRules">
<ItemGroup>
<MsDeploySkipRules Include="SkipCss">
<SkipAction>Delete</SkipAction>
<ObjectName>filePath</ObjectName>
<AbsolutePath>site\.css$</AbsolutePath>
<XPath>
</XPath>
</MsDeploySkipRules>
<MsDeploySkipRules Include="SkipCss2">
<SkipAction>Update</SkipAction>
<ObjectName>filePath</ObjectName>
<AbsolutePath>site\.css$</AbsolutePath>
<XPath>
</XPath>
</MsDeploySkipRules>
</ItemGroup>
</Target>
添加了这个,我的期望是构建会跳过我的site.css文件的处理。唉,在尝试了许多不同的东西后,文件总是在服务器上更新。经过一番挖掘后,我发现了一些内容(此处为SO或博客,此时不记得),提到.csproj需要一个指令来确保msdeploy.exe用于处理部署。考虑到这一点,我添加了以下内容:
<PropertyGroup>
<UseMsDeployExe>true</UseMsDeployExe>
</PropertyGroup>
现在,当我运行构建时,它失败并出现以下错误:
MSDEPLOY: The parameter 'IIS Web Application Name' has already been defined.
所以,我尝试从.csproj中删除<DeployIssAppPath>
元素,但这只会导致以下错误:
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.targets (4220): The "ConcatFullServiceUrlWithSiteName" task was not given a value for the required parameter "SiteAppName".
此时我几乎没有想法,真的需要让这个东西运转起来。有关我错过的关于“IIS Web应用程序名称”错误的任何建议或见解。已定义或关于&#39; SiteAppName&#39;的最后一个错误没有价值将不胜感激。
答案 0 :(得分:0)
您是否尝试在部署之前停止目标的应用池?我在PowerShell中使用类似的东西,在我的部署过程中从MSBuild调用:
echo ""
echo "Stopping $($args[0]) App Pool..."
echo ""
#Stop App Pool
MsDeployAppPoolSwitch $args[0] $args[1] $args[2] $args[3] "StopAppPool"
echo ""
echo "Deploying to $($args[0])..."
echo ""
#Deploy Site
WebsiteDeploy $args[0] $args[1] $args[2] $args[3] $DropFolder
echo ""
echo "Starting $($args[0]) App Pool..."
echo ""
#Start App Pool
MsDeployAppPoolSwitch $args[0] $args[1] $args[2] $args[3] "StartAppPool"