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.
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 the "Add View" window, and the class from another assembly was chosen from the "Model Class" drop-down menu.
What was also odd was that the error was occurring in the auto-generated view code and not from the source file in the solution.
Here are the things I tried to solve the problem.
Table of Contents
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:
Then check the "Copy Local" in the Properties window:
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!!):
This also didn't do anything.
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:
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:
Instantly, I noticed a possible culprit. Under the Application tab, the "Output type" had "Console application" selected instead of "Class Library":
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.
AndruRu
March 8, 2019Thanks! It was really helpful.
Luiz Faria
May 20, 2019Just restarting Visual Studio solved for me!
Victor
June 2, 2019You just saved my exam thank you.
Odel Kadosh
September 17, 2019Thanks:)
Sergey Dryomin
April 15, 2020My fix for similar issue was to change "Target framework" to the latest version. Thanks for your tips!
asdf
May 6, 2021Thanks.