Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MSdeploy deploys an MVC 2 application with wrong virtual directory name

I'm using MSbuild(v4.0.30319.1) and MSdeploy(v7.1.618.0) to deploy my ASP MVC 2 application on IIS(v7.5). Here are the commands I run to do it:

msbuild.exe <path to my csproj>/MyMvcApp.csproj /t:Package /p:configuration=release;outDir=<my output dir>

and msdeploy:

msdeploy.exe -verb:sync -source:package='<MSBuildOutputDir>\_PublishedWebsites\Webui_Package\MyMVCApp.zip' -dest:auto 

After build and deploy the application is deployed by address http://localhost/MyMVCApp_deploy and not by address http://localhost/MyMVCApp. I did not expect that the _deploy will be in the address. How can I fix this?

like image 838
Nozim Avatar asked Dec 09 '22 04:12

Nozim


2 Answers

As Portalus commented you can control the name of the app in the properties page. I'll expand a bit on that answer here.

Configure the default value on PP/Web tab

By default when you package/publish your web project we will create an Web Deploy parameter named IIS Web Application Name which controls this value. The default value for this is ProjectName_deploy. The reason why we put the _deploy suffix there is for IIS scenarios. So you may already have an IIS app with the name of ProjectName but its much less likely that you will have one named ProjectName_deploy. You can customize this value on the Package/Publish Web tab of the project properties. One thing to keep in mind if you go this route is that all of these settings are tied to a specif build configuration. So if you configure the settings on Debug and the create your package using Release those settings will not apply. See image below.

enter image description here

When you set this value it sets the MSBuild property, DeployIisAppPath, and you can use that if you want to have some logic relating to the value it gets.

Pass the parameter value on publish

If you want you can also just specify the value of this parameter when you are publishing. You have two primary approaches here.

  1. Specify the value for the individual property
  2. Specify the value for this and other properties in a file

1. Specify the value for the individual property:

You can use the -setParam parameter when calling msdeploy.exe to give a new value for that parameter. For example:

%msdeploy% -verb:sync -source:package=WebApplication3.zip -dest:auto -setParam:name="IIS Web Application Name",value="Default Web Site/FooBar"

2. Specify the value for this and other properties in a file

When you create a package in VS we automatically create for you a file named {ProjectName}.SetParameters.xml. This file is a simple XML file and it will contain all the parameters, along with their default values. You can update that file to include the correct parameter values and then pass it into msdeploy.exe (note: the file doesn't have to be named ...SetParameters.xml you can rename it to whatever you want). If you want to use this approach then just use the -setParamFile parameter when calling msdeploy.exe. Here is an example of the command line syntax for this:

%msdeploy% -verb:sync -source:package=WebApplication3.zip -dest:auto -setParamFile=WebApplication3.SetParameters.xml
like image 142
Sayed Ibrahim Hashimi Avatar answered Apr 27 '23 14:04

Sayed Ibrahim Hashimi


Change the application name in the settings.

Right click the web project hit properties. Go to package/publish web, change the application name to use on the destiantion server from "default web site/mymvcapp_deploy" to "default website/mymvcapp"

like image 35
Portalus Avatar answered Apr 27 '23 12:04

Portalus