After upgrading solution to .NET framework 4.5 the daily deploy stopped working
Asked Answered
S

3

6

We have with success been updating our development web site at a daily basis using msdeploy from TFS2010.

This was working fine until we upgraded to VS2012, our application from .NET Framework 4.0 to 4.5 and ASP.NET MVC from 3.0 to 4.0. It look like all is well and assemblies deployed but nothing has actually been deployed.

I have been looking into this for two days now and can't figure out why this is happening and now I am running out of ideas.

Below is part of my build script in the way it has been working before the upgrade.

<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"
                />

When the upgrade was initiated and my problem discovered we were using Web Deploy 2.0 but now we have upgraded to Web Deploy 3.0. I have also made sure we are building with ToolsVersion="4.0".

UPDATE --

msbuild.exe /p:AllowUntrustedCertificate=True /p:AuthType=Basic /p:Configuration=Dev /p:CreatePackageOnPublish=True /p:DeployIisAppPath=dev.myweb /p:DeployOnBuild=True /p:DeployTarget=MsDeployPublish /p:MSDeployPublishMethod=WMSvc /p:MsDeployServiceUrl=https://10.xxx.xxx.xxx:8172/MsDeploy.axd /p:UserName=UserName /p:Password=Password /p:UseMsdeployExe=True E:\Builds\1\WhatEver\Daily_Build\Sources\My.Web\My.Web.csproj

Now I also tried to run the above msbuild command from our TFS and no response which frustrates me completely. Nothing in the event log of TFS, nothing in log file no matter verbosity... Any ideas?

It does work using msdeploy directy like below;

<Exec Command="&quot;C:\Program Files\IIS\Microsoft Web Deploy V3\MSDeploy.exe&quot; -verb:sync -source:contentPath=&quot;E:\Builds\1\WhatEver\Daily_Build\Sources\My.Web\My.Web.csproj&quot; -dest:contentPath=&quot;E:\dev.my.web&quot;,computername=https://10.xxx.xxx.xxx:8172/MsDeploy.axd,username=UserName,password=Password,authtype=Basic -allowUntrusted=True"
              ContinueOnError="false" />

--

UPDATE 2 -- It appears Microsoft added a check for what type of projects that are publishable projects and our web application are not, since the Output Type is Class Library. This has been valid with v4.0 but apparently not for v4.5.

Anyone have an idea of what to do make it work again? Do I need to change the project type? Create publishing package up front and then deploy that? Or what?

--

Anyone else that has had the same problem? Have you found a solution to share?

Could there be an issue with version of MSBuild?

Susquehanna answered 18/10, 2012 at 13:34 Comment(7)
Do you have any kind of error messages in your build log, or is the deployment simply silently not occurring?Doublet
Unfortunately not, it simply silently not occuring. It would really help actually having some kind of feedback. Nothing in the build file either even with verbosity Diagnostic.Susquehanna
Does the call to msdeploy.exe appear in the msbuild output?Coriss
No, it does not. See my update above for my own research.Susquehanna
If you still need help here let me know so that I can work with you directly.Autoxidation
@Sayed, I have found a workaround which is to build and push the publish to file system. Then, call target 'Package', use XmlPoke to update the SetParameters.xml file and as final step use MSDeploy to deploy the package to my remote server. Is this really the way to do it? Earlier I used the all-in-one build&deploy way which was really neat.Susquehanna
@Susquehanna I have answered the questionAutoxidation
A
6

Here is what I would recommend. In VS2012 we have made it easy to automate publishing your web projects using the publish profiles which are created by the publish dialog. In your case create a new MSDeploy profile. When you create that profile we will save the settings into a file under Properties\PublishProfiles (or My Project\PublishProfiles for VB). The extension of this file will be .pubxml. Those files are actually MSBuild files, which you can customize if needed. You can continue to use the publish dialog as well. The password will be stored in a .user file and encrypted such that only you can decrypt it.

After you have created that profile you can publish with the command below if you are building the .sln file.

msbuild mysoln.sln /p:DeployOnBuild=true /p:PublishProfile=<ProfileName> /p:Password=<Password>

If you are building the .csproj/.vbproj then you need to tweak this a bit in the following way

msbuild mysoln.sln /p:DeployOnBuild=true /p:PublishProfile=<ProfileName> /p:Password=<Password> /p:VisualStudioVersion=11.0

More on why VisualStudioVersion is required at http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx.

Once you do this you will be able to build+publish just like you did previously. FYI we have shipped all these new web publish features for VS2010 in the Azure SDK https://www.windowsazure.com/en-us/develop/net/#.

Also in your question I noticed that you are specifying some custom properties, like MvcBuildViews. You can now place those properties directly inside the publish profile (the .pubxml file) if you want. Of course you can still pass them in on the command line if that makes more sense for your scenario.

More info on this at http://sedodream.com/2012/06/15/VisualStudio2010WebPublishUpdates.aspx.

If you take a look at the approach that we had for developers to automate publishing it was to specify properties and targets to be executed during the build. The problem with this approach is that this limits our ability to enhance the web publish experience. In the new release we have introduced an abstraction, the publish profile, which allows us to change the underlying targets of the web publish pipeline and your automation scripts will continue to run. Hopefully from this point forward you will not have to re-visit this issue.

Autoxidation answered 30/10, 2012 at 7:8 Comment(1)
Thanks. I already read a lot of your blog posts on sedodream :-). I think I would have walked the path of msdeploy profile earlier if I had the opportunity to deploy to any server at my current client. Unfortunately I am blocked to do that from my PC and all my effort needs to go through our TFS for trial and error and that's a pain working with msbuild and msdeploy.Susquehanna
O
2

I had much the same problem today. I too was trying to get a .NET 4.5 web application automatically deployed using a machine that did not have Visual Studio 2012 installed on it. There were a couple of minor differences in my situation, however: I was using TeamCity instead of TFS, and our solution was created with .NET 4.5 as opposed to being one that had been upgraded from .NET 4.0.

Nonetheless, I did have the same problem described. I'd use MSBuild to build the web app and deploy it to IIS, in much the same way. This approach worked fine on my dev machine. However, when I ran MSBuild on the CI server, it quite happily built the web app, but it stopped after that: no errors, no warnings, nothing, just a message that the build was successful. There wasn't the slightest hint of an attempt at deploying the app to IIS.

It seems MSBuild was missing the relevant targets to perform the web deployment. The fix was to copy the folder C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web from my dev machine to the CI server, copying it to the same place on the CI server as it was on my machine.

Once I did that, MSBuild then grumbled about needing Web Deploy 3.0, but that was fixed easily enough. After installing that on the CI server too, MSBuild quite happily deployed the web app.

Oneidaoneil answered 4/1, 2013 at 21:59 Comment(2)
Would that not cause a licensing issue?Waterloo
@leppie: I don't know for sure but I'm tempted to say not. You certainly don't need a full VS2012 licence to get hold of these MSBuild targets, as they're installed as part of VS2012 Express for Web. Besides, the Web folder isn't the only folder I had to copy to the server: MSBuild would even compile the web app on the CI server without the WebApplications folder in the VisualStudio\v11.0 folder.Oneidaoneil
M
0

To extend Luke Woodward's answer:

I, too, found that deploying C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\ from my local machine to the build server was the fix.

However, the real fix is to install the Microsoft Web Developer Tools as part of the VS 2012 installation, which will create this folder, among other things. This addresses Ieppie's licensing objection.

I tested this by...

  1. Deleting C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\
  2. Running the VS 2012 installer and adding MS Web Dev tools.
  3. Verifying that, after the install, C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\ was back.
Malda answered 8/11, 2013 at 19:29 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.