我们成功地使用TFS2010中的msdeploy每天更新我们的开发网站。
这一点工作正常,直到我们升级到VS2012,我们的应用程序从.NET Framework 4.0升级到4.5,ASP.NET MVC从3.0升级到4.0。看起来一切都很好并且已经部署了程序集,但实际上并没有部署任何内容。
我现在已经研究了两天了,无法弄清楚为什么会这样,现在我的想法已经不多了。
以下是我的构建脚本的一部分,就像升级前的工作方式一样。
<MSBuild
Projects="$(SolutionRoot)\My.Web\My.Web.csproj"
Properties="MvcBuildViews=False;AllowUntrustedCertificate=True;AuthType=Basic;Configuration=Dev;CreatePackageOnPublish=True;DeployIisAppPath=dev.myweb;DeployOnBuild=True;DeployTarget=MsDeployPublish;MSDeployPublishMethod=WMSvc;MsDeployServiceUrl=https://10.xxx.xxx.xxx:8172/MsDeploy.axd;UserName=UserName;Password=Password;UseMsdeployExe=True"
ContinueOnError="False"
/>
启动升级后我的问题发现我们使用的是Web Deploy 2.0,但现在我们已升级到Web Deploy 3.0。我还确保使用ToolsVersion="4.0"
构建。
更新 -
msbuild.exe / p:AllowUntrustedCertificate = True / P:=进行AuthType基本 / P:配置=开发 / P:CreatePackageOnPublish =真 /p:DeployIisAppPath=dev.myweb / P:DeployOnBuild =真 / P:DeployTarget = MsDeployPublish / P:MSDeployPublishMethod = WMSVC /p:MsDeployServiceUrl=https://10.xxx.xxx.xxx:8172/MsDeploy.axd / P:用户名=用户名 / P:密码=密码 / P:UseMsdeployExe =真 E:\构建\ 1 \任何\ Daily_Build \源头\ My.Web \ My.Web.csproj
现在我也尝试从我们的TFS运行上面的msbuild命令,没有任何响应让我完全失望。 TFS的事件日志中没有任何内容,日志文件中没有任何内容,无论详细程度如何......有什么想法吗?
它使用msdeploy directy,如下所示;
<Exec Command=""C:\Program Files\IIS\Microsoft Web Deploy V3\MSDeploy.exe" -verb:sync -source:contentPath="E:\Builds\1\WhatEver\Daily_Build\Sources\My.Web\My.Web.csproj" -dest:contentPath="E:\dev.my.web",computername=https://10.xxx.xxx.xxx:8172/MsDeploy.axd,username=UserName,password=Password,authtype=Basic -allowUntrusted=True"
ContinueOnError="false" />
-
更新2 - 似乎Microsoft添加了对可发布项目类型的项目的检查,而我们的Web应用程序不是,因为输出类型是类库。这对v4.0有效,但显然不适用于v4.5。
任何人都知道该怎么做让它再次运作?我需要更改项目类型吗?预先创建发布包,然后部署它?或者是什么?
-
其他有同样问题的人?你找到了分享的解决方案吗?
MSBuild版本会出现问题吗?
答案 0 :(得分:6)
这是我推荐的。在VS2012中,我们使用发布对话框创建的发布配置文件轻松自动发布Web项目。在您的情况下,创建一个新的MSDeploy配置文件。创建该配置文件时,我们将设置保存到Properties \ PublishProfiles(或My Project \ PublishProfiles for VB)下的文件中。该文件的扩展名为.pubxml。这些文件实际上是MSBuild文件,您可以根据需要自定义它们。您也可以继续使用发布对话框。密码将存储在.user文件中并加密,以便只有您可以解密。
创建该配置文件后,如果要构建.sln文件,可以使用以下命令发布。
msbuild mysoln.sln /p:DeployOnBuild=true /p:PublishProfile=<ProfileName> /p:Password=<Password>
如果您正在构建.csproj / .vbproj,那么您需要通过以下方式稍微调整一下
msbuild mysoln.sln /p:DeployOnBuild=true /p:PublishProfile=<ProfileName> /p:Password=<Password> /p:VisualStudioVersion=11.0
更多关于http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx需要VisualStudioVersion的原因。
一旦你这样做,你就可以像以前一样构建+发布。仅供参考我们已在Azure SDK https://www.windowsazure.com/en-us/develop/net/#中为VS2010发布了所有这些新的网络发布功能。
同样在你的问题中,我注意到你正在指定一些自定义属性,比如MvcBuildViews。现在,您可以根据需要将这些属性直接放在发布配置文件(.pubxml文件)中。当然,如果对您的场景更有意义,您仍然可以在命令行中传递它们。
有关http://sedodream.com/2012/06/15/VisualStudio2010WebPublishUpdates.aspx的更多信息。
如果您看一下我们为开发人员自动发布所采用的方法,那就是指定在构建期间要执行的属性和目标。这种方法的问题在于这限制了我们增强Web发布体验的能力。在新版本中,我们引入了一个抽象,即发布配置文件,它允许我们更改Web发布管道的基础目标,并且您的自动化脚本将继续运行。希望从现在开始,你不必重新访问这个问题。
答案 1 :(得分:2)
今天我遇到了同样的问题。我也试图使用没有安装Visual Studio 2012的机器自动部署.NET 4.5 Web应用程序。然而,我的情况有一些细微差别:我使用的是TeamCity而不是TFS,我们的解决方案是使用.NET 4.5创建的,而不是从.NET 4.0升级的。
尽管如此,我确实遇到了同样的问题。我将使用MSBuild构建Web应用程序并以相同的方式将其部署到IIS。这种方法在我的开发机器上运行良好。但是,当我在CI服务器上运行MSBuild时,它非常高兴地构建了Web应用程序,但之后就停止了:没有错误,没有警告,没有任何内容,只是构建成功的消息。尝试将应用程序部署到IIS没有丝毫暗示。
似乎MSBuild缺少执行Web部署的相关目标。
解决方法是将文件夹C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web
从我的开发计算机复制到CI服务器,将其复制到CI服务器上与我的计算机上相同的位置。
一旦我这样做,MSBuild然后抱怨需要Web Deploy 3.0,但这很容易修复。在CI服务器上安装后,MSBuild非常高兴地部署了Web应用程序。
答案 2 :(得分:0)
我也发现从本地计算机向构建服务器部署C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\
是修复。
但是,真正的解决方法是安装Microsoft Web Developer Tools作为VS 2012安装的一部分,这将创建此文件夹等。这解决了Ieppie的许可反对意见。
我通过......测试了这个。
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\
又回来了。