I know I can just copy all of my files from my development environment into my live website directory, but then I know I'm copying several files that aren't necessary (e.g. the .sln file and .csproj files).
What files actually have to be copied for ASP.NET MVC web applications to run? (E.g. Do I need to copy all .CS files?)
If you develop in Microsoft Visual Studio, you can use the Build > Publish option (when you're in the context of an ASP.NET MVC project) and publish it directly.
If you cannot use this and have to do a copy all you need is anything that ISN'T a .cs file (views, .config files etc) and your compiled ASP.NET MVC site's .dll (ex MvcApplication1.dll). If you want to get an idea of what you need use the Build > Publish tool to a local directory and take a look at what's in there.
You don't need solution or project files.
Using the Build / Publish approach is the best to ensure you have the files you need. Before building though, if you don't have ASP.NET 3.5 SP1 installed on your server, make sure you go into the references in your project for the following assemblies and set the to "Copy Local" in each of their respective property pages.
System.Web.MVC
System.Web.Routing
System.Web.Abstractions
This will make sure that each of these assemblies is copied to your "bin" folder on the published site.
Brian
After you compile your project, you shouldn't copy all .cs files.
Take a look at this link.
Basically everything but the views get compiled into a dll. You can use the deploy option to see what you need to deploy ;).
Related
I am using TFS 2015 for creating builds of application. I am able to create build template for web application as web application have both .sln and .proj.
But for Websites, I only have .sln file and no .proj.
How can I create Build definition in TFS 2015 for website having only .sln file?
As #Cece said, the answer is yes, you can run the MSBuild on the server without a .csproj.
I am assuming that your project is not running on the final version of the .Net Framework. In your case I suggest you to make this change
https://stackoverflow.com/a/42493822/819153
Then you should copy all the files from the PrecompiledWeb folder, and there you should find your .sln
Sometimes there are vb/cs projects that I have seen that they do not come with a project file, csproj or vbproject. They run with the .NET Framework 2.0. For those, you can create a build definition just to compile the .sln, but when you deploy the application, you need to copy the entire PrecompiledWeb folder to the IIS folder on your server. Try to add the task that has the option copy and publish and put all the changes to your server.
Check the privilege of the folder where you want to put the files, and be sure that the agent that is running the builds on the TFS has access READ/WRITE access to the server folder.
In your case, please check the .sln file, inside of it you should have a TargetPath, by default is PrecompiledWeb, but sometimes when you run the msbuild on the tfs you end with an error saying that the PrecompiledWeb can't be on the same tree of your solution, what you need to do then is putting a level up of your solution folder
Debug.AspNetCompiler.TargetPath = "..\..\PrecompiledWeb\YourProject"
Then on your CopyTask you need to change the CopyRoot directory, if you made any transformation before your build step to the webconfig, those transformations will be reflected on the PrecomiledWeb\YourProject. All the files in that folder should be deployed to the server folder path.
Lets say that you have this structure in your Branch
Branch/MyProject, then after you compile the source code on the TFS, your precompiled folder will be stored at the same level of your project on the agents folder. Please see the picture below to get the idea how to copy the files from the PrecompiledWeb.
The answer is Yes. You can create a build definition for a WebSite project by specifying the .sln file.
In my solution I have a basic ASP.NET MVC website and a Wix Project. To identify the files that need installed I'm using Heat (a Wix component) to index the build output. This is part of a post-build event. It works perfectly on my local machine when building in Visual Studio 2015.
My problem occurs when checked-in and the CI (TFS Build) builds it. The differences are:
The contents of the bin folder is placed directly in the build folder
The rest of the website is placed under a new _PublishedWebsites folder
This means many of the references get broken. For example when dropping the _PublishedWebsites folder into IIS breaks (as .net cannot locate the contents of Bin)
After much research on the subject, and many attempts to pass MSBuild parameters, I'm reaching the end of my efforts.
Is there a way for a build in TFS to leave file locations intact without copying and creating new folders?
If not what is the recommended way to get a deployment ready site (in a single folder) from TFS?
Adding a Copy Files task to copy bin folder to $(build.artifactstagingdirectory)\_PublishedWebsites, check the screenshot below:
I've a MVC 4 application and runs well on my DEV Machine where I installed MVC 4 extension for VS 2010.
When deploying to the web server with IIS 7, do I need to install MVC 4 or should the dll included on my project is sufficient?
The reason I'm asking is we need to provide the requirement to infrastructure team.
Thanks.
You can run an MVC application without installing MVC on your server. There is something called deployable dependency in Visual studio. That will publish your MVC DLLs in your bin folder when you publish it.
from the msdn page,
This will add assemblies (DLL files) to a Web site project or Web application
project. When you deploy your Web site or application, the files are
included in the deployed project. This is useful if applications or
technologies that your project depends on are not already installed on
the server that will host your Web project. For example, you can use
this feature to deploy an ASP.NET MVC 3 Web application to a server
that does not have ASP.NET MVC 3 installed.
Right Click on Project and Select Add Deployable Dependency from the context menu
Select what all DLLs you want to be published
After clicking OK, You will see a new folder called _bin_deployableAssemblies. You can do normal Publishing procedure now and you will have the dlls in the bin folder of the publish output.
Check this post for more details http://haacked.com/archive/2011/05/25/bin-deploying-asp-net-mvc-3.aspx
You should have Visual Studio 2010 SP1. Otherwise it will not be shown in the context menu when you right click on the project to be published.
EDIT :
As of MVC4, all necessary assemblies to run an MVC application are automatically added to the bin directory, and any MVC4 application is bin-deployable (means you can run it in a server without explicitly installing MVC) . For this reason, the Include Deployable Assemblies dialog has been removed from Visual Studio 2012
You no longer have the option to "Add deployable dependencies" in Visual Studio 2012. So you'll have to do it manually, by bin deploying all the MVC assemblies:
Microsoft.Web.Infrastructure
System.Web.Helpers
System.Web.Mvc
System.Web.Razor
System.Web.WebPages
System.Web.WebPages.Deployment
System.Web.WebPages.Razor
A step by step guide is found here.
When u create a MVCx specific project in Visual Studio you will see lots of MVC.* references are added to your project and by default all of these reference property "Copy Local" is set as "True" means these references will be part of your final solution whenever you will deploy to. You can also verify that these MVC specific references are also part of your BIN folder.
Finally when you will package this solution and publish to a specific Web Server or to Windows Azure or use WebDeploy, all of these references will be part of your package also. And because these references are shipped in your package so where ever you will deploy the solution, all MVC specific references will be there and because of that you don't need to deploy MVC to those specific servers.
I would also like to add that any time when you add a specific reference to your project in Visual Studio, set its property "Copy Local" to TRUE so that reference will always be part of your final solution, and will save you from trouble in future.
You only need to have the dlls deployed into the bin of your project. For an example of how to prepare your web site for release check out the following blog post:
running-an-asp-net-mvc-3-app-on-a-web-server-that-doesn-t-have-asp-net-mvc-3-installed.aspx.
I have an ASP.NET MVC project that I'd like to install somewhere using xcopy (as opposed to an installer).
How do I export/build to a folder that I can copy straight to the IIS environment? I think at work we use a web deployment project but that's a plugin and I was wondering if there's another way?
If you're using Visual Studio 2010, you can right-click on the project in Solution Explorer and choose "Publish". This will allow you to publish directly to IIS, via FTP and via FPSE.
For your purposes, though, you can choose the Filesystem option and point it somewhere local. There should be everything you need in that directory to do XCOPY deployment.
I am able to configure our Build Server (Team Build 2008) to build our asp.net application. I've done so via
<ConfigurationToBuild Include="Debug|Mixed Platforms">
<FlavorToBuild>Debug</FlavorToBuild>
<PlatformToBuild>Mixed Platforms</PlatformToBuild>
</ConfigurationToBuild>
Problem though, the asp.net assets(eg. script folders, imgs, etc.) are not copied to the deployment folder. Folder(_PublishedWebsites) only contains the binaries references of the app plus the pre-compiled web services.
Is there a way to include said folders/files to the deployment folder?
Thanks
Note: Using Website Projects (WSP)
I was able to make this work, and factors included the way our project was checked in to our source control.
Since we're using WSP, the assemblies refrenced are copied to the bin folder, unfortunately devs checked everything in (including this) and TFS cannot overwrite the same files since TFS marked everyfile(not for edit) as read only. The resolution is to remove those .DLLs in the bin and just check in the .refresh files and let the compiler copy the actual .DLLS to the bin.
The aspnet_compiler has problems with WSP as it works well with project files(ie WAP) and that the references of physical(debug/release) of the sln file confuses it (eg ......\webappfolder). The resolution is to make(hand editing the sln file) the Debug.AspNetCompiler.PhysicalPath and Release.AspNetCompiler.PhysicalPath point to ".\webappfolder\" instead of the previous so that aspnet_compiler will be able to actually go to that folder and compile.
Make sure in the tfsbuild.proj you have the same setting (depending on the release or debug) above