ASP.NET MVC : How to fix razor view error - type or namespace could not be found

asp.net mvc - razor cannot find assembly server error

Recently, I was working on an ASP.NET MVC project using Visual Studio and the web project had strongly-typed views that were using model classes located in another class project in the same solution. The project itself got built successfully and was running fine until it tried to show those views, it returned the Compilation Error saying that the type or namespace name could not be found. In this article, I will show you what I tried and how I finally solved the problem.

The exact server error is shown below. The 'MyCustomClass' is the assembly name of the class project in the solution.

Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS0246: The type or namespace name 'MyCustomClass' could not be found (are you missing a using directive or an assembly reference?)

It seemed strange to me that the view had trouble finding the reference of the type since the view was strongly-typed, generated by Visual Studio using "Add View" window and the class from another assembly was chosen from "Model Class" drop-down menu.

What was also odd was that the error was occurring in auto-generated view code and not from the source file in the solution.

Here are the things I tried to solve the problem.

Checking "Copy Local" property of the reference

The first thing I checked was if the class library's reference in the ASP.NET MVC project had the "Copy Local" property set to true. In the past, I had some issues with Visual Studio not finding types when the property was set to false.

We can check this property by expanding the References node in the ASP.NET MVC project and right-click the reference in question and select Properties from the context-menu as shown below:
Visual Studio - reference properties

Then check the "Copy Local" in the Properties window:
Visual Studio - reference copy local propertiy

In my case, it was already true, so I had to keep looking.

Adding namespace in web.config of the View

Next, I tried to add the namespace that it couldn't find manually inside the <namespaces> tag in the web.config file under Views folder (not in the one located in the root folder!!):

      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization"/>
        ...
      </namespaces>

This also didn't do anything.

Note: To learn more about why there is also a web.config under Views folder, check this article.

Adding @Using inside the View

Next, I tried to add namespace directly to the view itself that is causing the problem. I added the @using directive at the beginning of the view:

@using MyCustomClass;

This modification changed the source of the error from the auto-generated code to the source file of the view itself and nothing more.

Checking properties of the class project

Then I turned my attention to the class project itself to see if anything in there might cause this "type or namespace name could not be found" error.

First, I checked the Properties of the project. You do that by right-clicking on the project name in solution explorer and selecting "Properties" from the context-menu, as shown below:

Visual Studio - project properties

Click to Enlarge

Instantly, I noticed a possible culprit. Under the Application tab, the "Output type" had "Console application" selected instead of "Class Library":

Visual Studio - project properties output type

Click to Enlarge

In the end, this was the source of the problem. Changing "Output type" to "Class Library" finally fixed the issue.

Conclusion

When the ASP.NET MVC project builds and the web application runs successfully, the run-time error The type or namespace name could not be found might come as a surprise. In this article, we examined a few examples, what to check if this problem occurs. In the end, for me, the cause of the problem was a referenced class library, that was mistakenly created as a console application.

Share this page

Add a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Back to Top