MVC3 deploy - Could not load file or assembly 'System.Web.WebPages.Razor

Whilst deploying my newly upgraded ASP.NET MVC 3 web application to the production environment I started receiving a FileNotFoundException with the error message "Could not load file or assembly 'System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified." I have encountered this before so I know it is about bin-deploying that assembly. But where is the System.Web.WebPages.Razor assembly?

Since you have installed ASP.NET MVC 3 on your development machine you have all these MVC 3 assemblies installed in your GAC. Your production machine does not!

So you need to find this file and make it bin deployable however this cheeky assembly isn't in you solution so how can you do that? Well... add it. Go to Add Reference on your root web project (e.g. Web.csproj) and find System.Web.WebPages.Razor and add.

 

Now right click this assembly in your references directory and click properties.

Now you can make it bin deployable by setting Copy Local to true like so:

Note this is how to deploy the System.Web.WebPages.Razor assembly withe your ASP.NET MVC 3 web application. To deploy a typical setup of an ASP.NET MVC 3 app you will need to do the same for all of the following assemblies:

  • System.Web.Mvc
  • System.Web.Helpers
  • System.Web.Razor
  • System.Web.WebPages
  • System.Web.WebPages.Deployment
  • System.Web.WebPages.Razor as detailed above
  • Microsoft.Web.Infrastructure this will also need a reference added as above
  • WebMatrix.Data this also needs the reference


Of course you only need to add the reference to these assemblies if they are not already there - in most cases it will be. This was mainly a blog post for the slightly more complicated System.Web.WebPages.Razor.dll

Update

There is an easier way to do this if you are using Visual Studio 2010 Service Pack 1 and using Web Deploy as your publish action when publishing. You can add deployable dependencies to your ASP.NET MVC project that will choose the necessary assemblies for you. Even easier!

SharePoint 2010 Favicon

How to set Favicon to the SharePoint 2010 site?

SharePoint 2010 comes with a orange Favicon and it's present in SharePoint Root Folder\Template\Images [eg. C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\IMAGES\]. Open this folder and search for favicon.ico and rename the file to FaviconBackup.ico. Now copy your favicon to this folder and make sure it's named as "favicon.ico". Now restart IIS(open Command Prompt -> IISReset), clear browser cache/temproary internet files. Close the browser and reopen then browse the SharePoint site.

If mulitple sites are hosted in same farm and need to set different favicons for different sites then we have to update Master Page Code. Open the site with SharePoint Designer 2010 and select Master pages -> v4.master. The default.master is still present in SharePoint 2010 for backward compatibility and visual upgrade. But SharePoint 2010 uses v4.master only. Now click "Edit File" link to add the favicon code. If it asks for check out, click yes and continue.

Find and change the path of favicon. Save and close (If you have checked out then you need to check in and site collection administrator has to approve it via Site Settings -> Galleries -> Master pages and page layouts -> Check in and Approve). Now reset IIS/clear browser cache and check.

SQL Order By CASE with Multiple Columns

When attempting to Sort by different "MULTIPLE" Columns using a SQL Server Stored Procedure, this is the how it is done! 

USE AdventureWorks; 
SELECT   ContactID, 
         FirstName, 
         LastName, 
         Title = COALESCE(Title,'')
FROM     Person.Contact
WHERE    LEFT(FirstName,1) = 'M'
ORDER BY CASE 
           WHEN LEFT(LastName,1) = 'A' THEN RANK() OVER(ORDER BY FirstName + LastName) 
           WHEN LEFT(LastName,1) = 'M' THEN RANK() OVER(ORDER BY LastName + ', ' + FirstName, Title) 
           WHEN LEFT(LastName,1) = 'U' THEN RANK() OVER(ORDER BY LastName + ', ' + FirstName DESC) 
           ELSE                             RANK() OVER(ORDER BY LastName DESC, FirstName DESC) 
         END 

Another example: This is passing in the Sort order via a Stored Procedure Parameter. In this case @SortOrder is a varchar(100).

SELECT ItemId, ProdSize, TagNoProductIdLocation, PONo
FROM vewInvTrxSummary
ORDER BY 
        CASE WHEN @SortOrder LIKE '%Product, Tag, Location, Size, PO%' 
THEN RANK() OVER(ORDER BY Prod, TagNo, Location, Size, PONo)
                  WHEN @SortOrder LIKE '%Product, Size, Tag, Location, PO%' 
THEN RANK() OVER(ORDER BY Prod, Size, TagNo, Location, PONo)
                  WHEN @SortOrder LIKE '%Size, Product, Tag, Location, PO%' 
THEN RANK() OVER(ORDER BY Size, Prod, TagNo, Location, PONo)
                  WHEN @SortOrder LIKE '%Product, PO, Tag%'                      
THEN RANK() OVER(ORDER BY Prod, PONo, TagNo)
                    ELSE RANK() OVER(ORDER BY Prod, TagNo, Location, Size, PONo
         END

Web Pages not rendering in Internet Explorer 9

I had an issue of Web Sites NOT rendering in IE9 for a site that I have running locally in IIS. I could, however, render the page in IE9 on another machine and it worked just fine. My issue was just locally and ONLY when I used the local machine name. i.e. http://localhost WORKED! But http://MachineName DID NOT work. So to fix my issue I just addedhttp://MachineName to the Local Intranet Site list in IE9.

Tools -> Internet Options -> Security -> Local Intranet -> Sites. Then Addhttp://MachineName to the list. Uncheck the https checkbox if just adding http.

Then it all started working locally. I'm not sure why this is as I have other servers that work just fine. I have never come across this issue until now. Good news is that it works now, but I would like someone to explain why I had to do that in the first place.

BTW, this was on a Windows 2008 R2 after installing SQL Server 2012 Reporting Services and SharePoint 2010 Enterprise.

Hope this helps someone!

Dave.

SharePoint Widget Multiplies

I had this same issue and the reason why it multiplies is because it's in a Content Editor WebPart (CEWP) as a <Script> when it should be Linked to a document in a library. Basically, copy the <Script> into a Notepad document then save it as Widget.htm on your desktop. Then create a New Document Library called Widgets (sounds good to me!), then add the Widget.htm file to the library. Click in the document and you will see the widget render as expected. Then the copy the URL from the address bar. Add a new CEWP to your web page and then paste the URL into the link section! BTW, I would not include http://mysite in the link, just use everything else it.

Now your widget is safely rendered and it will NOT multiply like magic bunnies.

Hope this helps someone out there! Oh BTW, this issue arrived to me after I migrated a 2007 to 2010 site.

Dave

SharePoint 2010 List View Videos

I have had to do some work on Data List Views recently after migrating from 2007 to 2010 since DataFormWebParts don't really work as they should in 2010, especially when it comes to the DispForm.aspx, for example, especially because (at least I found this) it would not open the DispForm.aspx page in Modal Dialog mode. Plus the New and Edit forms would not open in Modal Dialog either. So I have found a few excellent videos by Laura Rogers that helped me a lot. Basically XSLT Views Rock!

Laura Rogers - SharePoint 2010 Data View and XSLT List View:  http://www.youtube.com/watch?v=r2eODYHp73A

Laura Rogers - Creating Hyperlinks in SharePoint Designer 2010:  http://www.youtube.com/watch?v=-ZBF_J1RWis

SharePoint 2010 - Display list or library on another site:    http://www.youtube.com/watch?v=0SfpgoEUlIw

YouTube Site: http://www.youtube.com/user/WonderLaura67

Laura provides a lot of information so please replay the videos as you will pick up more and more as you put her advise to practice.

Hope this helps someone out there! I know it helped me a great deal.

Dave 

SharePoint 2010 Site is Locked

I have had this issue popup a couple times in the last 2 years and it always catches me off guard!

You notice that "all of a sudden" one day that your SharePoint Site is Locked. You can't add anything, change anything, like users or documents. It's all locked! This is usually because a Backup was stopped (or died from a server reboot!) before it was able to complete!

Simple solution that you can run at the SharePoint PowerShell Command Line: Set-SPSite -Identity "<SiteCollection>" -LockState Unlock
More Info here: http://technet.microsoft.com/en-us/library/cc263238.aspx 

SharePoint 2010 UIVersion

After a upgrading SharePoint 2007 to 2010, the UI Version is still set to version 3, which makes it look like SharePoint 2007. In order to update the UI to look and feel like SharePoint 2010 to need to run the following script, which will update all site collections. You should save this as UpdateSPUIVersion.ps1, then run it in PowerShell.

Add-PSSnapin Microsoft.SharePoint.Powershell –ErrorAction SilentlyContinue
$SiteCollection=Get-SPSite("http://<SharePointSiteURL>")
foreach($web in $SiteCollection.AllWebs)
{ 
    $web.UIVersion = 4; 
    $web.UIVersionConfigurationEnabled = $false; 
    $web.update();
}

 

How to remove “Server name” items from history of SQL Server Management Studio

For SQL 2005, delete the file:

C:\Documents and Settings\<USER>\Application Data\Microsoft\Microsoft SQL Server\90\Tools\Shell\mru.dat

For SQL 2008, the file location, format and name changed:

C:\Documents and Settings\<USER>\Application Data\Microsoft\Microsoft SQL Server\100\Tools\Shell\SqlStudio.bin

How to clear the list:

  • Shut down all instances of SSMS
  • Delete/Rename the file
  • Open SSMS

SharePoint 2010: JavaScript in Quick Launch and Top Link Bar!

The quick way to get a Quick Launch to open in a new windows is like this! The Gotcha is NOT to use double quotes! Always use single quotes.

javascript:window.open('http://www.bbc.co.uk','_blank');history.go(0);
Good link here too: http://techtrainingnotes.blogspot.ca/2010/10/sharepoint-javascript-in-quick-launch.html

To Open a SharePoint 2010 window as a Dialog such as NewForm.aspx, use this method.

EXAMPLE CODE:
JavaScript:var options=SP.UI.$create_DialogOptions();
options.url='http://techtrainingnotes.blogspot.com';
options.height = 400;
void(SP.UI.ModalDialog.showModalDialog(options))

Put this in one line in the Quick Launch, like this;

JavaScript:var options=SP.UI.$create_DialogOptions();options.url='/intranet/Lists/Issues/NewForm.aspx';void(SP.UI.ModalDialog.showModalDialog(options))


as explained here: http://techtrainingnotes.blogspot.ca/2010/12/sharepoint-opening-2010-dialog-box-from.html