The 'CodeFile' attribute cannot be used without an 'Inherits' attribute - asp.net

I'm new to building .net applications and I have done alot of research on this, I'm trying to publish a series of asp.net web pages and having been researching why the error is appearing and trying several ways to stop the errors. I've come to a dead end..So I get two types of errors which are :
Error 166 The 'CodeFile' attribute cannot be used without an 'Inherits' attribute. C:\Users\Aj\Code\admin\content.aspx 33
and
Error 148 Could not load type 'MasterPage'. C:\Users\Aj\Code\admin\content.aspx 2
The code identified is :
<%# Page Language="VB" AutoEventWireup="false" CodeFile="content.aspx.vb" Inherits="_content" MasterPageFile="../MasterPage.master" %>
<%# MasterType TypeName="MasterPage" %>
Key note:
This is one of many files which have the same error, and the master page file is in the parent folder.

Take a look for the output, it will show the real error instead of guess why CodeFile error.

You should look at the difference in Web Application Project vs Web Site Project. In a web application project, you publish the compiled assemblies while in a website project, you publish the source code. It looks like you may be trying to publish the source from a web app project. It is possible, with some work, to convert to a web site project.
Also, try changing your master file link to use ~/ syntax, it may be a path issue.

Related

Where to find the codebehind?

I'm new to ASP, just inherited a database application. I'm having trouble with probably the most basic thing... how the file structures are set up.
I've confirmed I've found the right .aspx file of the page I'm working on, but it's just the template. I am looking for the code that is behind that file.
The page starts with:
<%# Page Title="" Language="C#" MasterPageFile="~/print.Master" AutoEventWireup="true"
CodeBehind="Servicecallreport.aspx.cs" Inherits="CrisisSupportApp.Secure.Reports.BriefSummaryReport" %>
I've done a search for "Servicecallreport.aspx.cs" and "CrisisSupportApp.Secure.Reports.BriefSummaryReport" on the server and I get nothing.
Where should I be looking for these .asp.cs files?
Look for a version control system like git, subversion, or TFS. The code is likely in there. ASP.Net does not need to deploy those code files to the web server at all, but instead allows you to pre-compile them.
try:
(what ever your root is)\CrisisSupportApp\Secure\Reports\BriefSummaryReport.cs

BC30560: 'ExtensionAttribute' is ambiguous in the namespace 'System.Runtime.CompilerServices'

I have asp.net project (in .net 2.0) and I converted project to .net 4.0.
After I built the project successfully, I launched the website on browser, it throws error as following:
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: BC30560: 'ExtensionAttribute' is ambiguous in
the namespace 'System.Runtime.CompilerServices'.
Source Error:
[No relevant source lines]
Source File: InternalXmlHelper.vb Line: 9
........
Please give me some idea to fix it.
A common trick to use extension methods (for LINQ etc) in .NET 2 with the C# 3 (or above) compiler was to define your own ExtensionAttribute in the right namespace.
Now that you have upgraded to a later version of .NET you need to remove this now-redundant extra attribute. Find where it is defined in your code and expunge it. Also check for external libraries like LINQBridge - you won't need this any more.
One way to find it would be to use the object browser and search for ExtensionAttribute.
This was how I found the issue.
Another easy way to verify: In your code, temporarily use the class somewhere. Example:
System.Runtime.CompilerServices.ExtensionAttribute x = null;
When building, this will generate error:
The type
'System.Runtime.CompilerServices.ExtensionAttribute' exists in both
'c:\Program Files\Reference
Assemblies\Microsoft\Framework\v3.5\System.Core.dll'
and .....
And show you immediately the 2 sources causing the conflict.
I had this exact same error, and what solved it for me was to delete the Themes (under App_Themes). I haven't tried re-adding the themes to see if they'll work yet, but deleting that fixed the error, at least.
Note that I discovered it was the Themes causing this by looking at the compiler details in the error, and noting that the only .vb files it was compiling were related to themes (auto-generated). My project is all C#, so the error coming from VB made me look for the .vb files.
I had this problem, and listed below is what worked for me.
The clue was that the error message mentions InternalXmlHelper.vb. I am a C# programmer, so why the mention of a VB component?
This problem can arise if you have not been explicit about the compilation language for your ASPX page. If you have not been explicit, then IIS will compile in whatever is set as the default language for that site. If you are writing in C#, have not been explicit about the compilation language, and the default compilation language in IIS is C#, then happy days. But if the default compilation language in IIS is set to vb (which it seems it is by default), then your C# page is going to get compiled as if it were vb, and you get the BC30560 error.
The best fix is to be explicit as to the compilation language for your aspx pages, by putting a directive like this at the top of each of your aspx pages:
<%# Page Language="C#" %>
Alternatively, you can leave your pages ambiguous (no Page Language directive) and tell IIS what to use as the default compilation language, like this:
With IIS manager -> go look at the root of your websites (it will be your server name) then -> in the ASP.NET section -> double-click the .NET Compilation icon (blue down-arrow) -> in the list of settings, under the General heading, is a setting for Default Language -> set this to c#
You can also set the default language per website if you want. Same as above, but set it for a website below the root of the left-hand-side IIS tree view, instead of for the root of it. Note that if you set your default-language=c# for a website, that setting gets stored in the root web.config of your site - in the <system.web> section you'll have a value like this: <compilation debug="false" defaultLanguage="c#" />. If you delete or overwrite that setting in your web.config, it will revert to whatever is default for the IIS instance.
This error is also because you don't have the page directive at the top of your aspx file. This is why VB compiler is used.
Write this to the top:
<%# Page Language="C#" %>
I had this error. Simply restarting Visual Studio made it go away.
This error also occurs in ASP.NET MVC Web Applications if you use an incorrect file extension for your views or partials.
I had inadvertently created a view using an incorrect extension (.ascx instead of .cshtml) and received this error message.
Changing the extension to .cshtml fixed the issue.

ASP.NET: Could not load type

I'm getting the following error:
Could not load type 'Intel.Intel'.
I copied my entire Visual Studio 2010 folder before I formatted my computer and I copy/replaced the same folder with this one after I installed windows again. I'm running this locally not on a host server. Anyone know what I'm doing wrong? I've search google and find many pages giving solutions for this, but none seem to fix my problem. Let me know if I need to provide anymore additional information. Thanks!
Update: Sorry I was unclear I copied the "Visual Studio 2010" folder from under my documents. I've installed Visual Studio 2010 Premium from my MSDN account.
Update 2: I also forgot that I was getting this error below before the Could not load type error. I fixed it by replacing the "~" with ".". The strange thing is that while that will seem to fix that error -- If I try locating the file through the "Pick Master.." option when retyping "MasterPageFile=" it will give me the path with the tilda and yet it wont work. I don't know if this helps identify the overall problem or not.
The file '/Intel.Master' does not exist.
And below notice the "~/Intel.Master" -- as mentioned above I can get rid of this error by changing that to "./Intel.Master"
<%# Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Intel.Master" CodeBehind="Index.aspx.vb" Inherits="Intel.Index" %>
Found a solution.
I looked in IIS Manager and I found that my application was a folder icon and not an application icon. So I right clicked it and selected "Convert to Application". After doing this it solved that error and now I have another one. I feel however that this solution did "fix" the problem.
There are a bunch of registry settings that would be missing installing in this manner. Also there are components (shared) that are installed outside of the VS2010 folder.
Your best bet would be to re-install Studio in the usual (from media) route.
Based on EDIT:
The types that are missing look like they were previously stored in the GAC. Delete the reference in the project and re-create referencing the actual assembly file (DLL)
To add the reference back in to you project, open your project, drop down your solution folder, then your projct - find the references node, right click it choose add refernce, go to browse .net assemblies and or file tab depending on where the dll is, find your dll and double click on it.
Replace the CodeBehind By CodeFile and remove the namespace. before the Inherits class name. For example:
Wrong:
<%# Page Title="" Language="vb" AutoEventWireup="false"
MasterPageFile="~/Intel.Master" **CodeBehind**="Index.aspx.vb"
Inherits="**Intel.Index**" %>
Right:
<%# Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Intel.Master" **CodeFile**="Index.aspx.vb"
Inherits="**Index**" %>
it works I promise

In Web application, could not load type? asp .net?

In web applicaiton, when i am running the asp.net project i am getting the error like :
Could not load type 'Com.ajSolutions.CosmacCRM.Web.EmpInserting'.
<%# Page Language="C#" AutoEventWireup="true" CodeBehind="EmpInserting.aspx.cs" Inherits="Com.ajSolutions.CosmacCRM.Web.EmpInserting" %>
can you help me thank you.
This is often a result of the compiled code not being found by the runtime.
The DLL may be missing. Or if it's compiled on the fly, the code itself may be missing. Or maybe the type itself doesn't exist in the code (possibly renamed or moved to a different namespace).

Visual Studio 2008 losing intellisense for ASCX with CodeBehind (but works for CodeFile)?

I have the following definition at the top of my .ASCX file:
<%# Control Language="C#" AutoEventWireup="true" CodeBehind="ArticleView.aspx.cs" Inherits="MyNameSpace.ArticleView" %>
In that control I make use of <%= %> blocks to refer to members that I've declared in the code-behind file. If I compile and deploy the control, it works fine. But in Visual Studio I get a lot of design-time errors, "{some variable} does not exist in the current context." And Intellisense breaks too: it works for members of UserControl, but can't find my own declared members. There are other issues as well. In general, everything points to the fact that the ASP.articleview_ascx class getting generated is somehow not inheriting from the MyNameSpace.ArticleView class.
I've found that if I switch the CodeBehind attribute to "CodeFile":
<%# Control Language="C#" AutoEventWireup="true" CodeFile="ArticleView.aspx.cs" Inherits="MyNameSpace.ArticleView" %>
suddenly Intellisense works and all the design-time errors disappear. But I don't want to do runtime compilation, or deploy my .ASCX.CS files - so I can't use CodeFile.
I've checked the simple stuff, like making sure that my CodeBehind filename is correct & the Inherits class has the proper namespace, etc. (And since it works properly after changing the attribute to CodeFile, those must be pointing at the right place....) But what am I missing? Why can't it handle the CodeBehind attribute?
Thanks,
Steve
Update: from a thread below - basic question was, why not just use CodeFile? Answer: when I try to deploy using CodeFile= in my files, after deploying I receive the following stack trace (presented in its entirety):
/_layouts/Pages/ViewPage.aspx.cs' does not exist. at System.Web.UI.Util.CheckVirtualFileExists(VirtualPath virtualPath) at System.Web.UI.TemplateParser.ProcessCodeFile(VirtualPath codeFileVirtualPath) at System.Web.UI.TemplateParser.ProcessMainDirectiveAttribute(String deviceName, String name, String value, IDictionary parseData)
(This is from a request to /_layouts/Pages/ViewPage.aspx. ViewPage is the page that has several other controls including the ArticleView mentioned in my original example. It just happens to be the first file that fails - if I go back to CodeBehind= in ViewPage, then included ASCX with CodeFile= will fail in the same way.) This seems to be the page compiler complaining because the inherited codebehind class can't be found in any loaded DLL, so it expects there must be a CS file to do on-demand compilation.
The issue here is that I don't want to deploy CS files, just ASPX/ASCX. Having read through many articles like this great one I'm aware of the various new models of deployment, although I've never used anything but a Web Application Project (converted forward from VS2003, we were late adopters of 2005 & the WAP model had already been added by the time we switched up from 2003.) Over many VS2005/8 projects, I've never had a problem with CodeBehind=, until this Intellisense issue showed up... though it doesn't help that in this case I'm deploying to SharePoint, which introduces a whole new level of complexity.
Since I've not deployed using CodeFile before, it's very likely that I'm missing some option I'm supposed to set in VS when building, in order to force a pre-compile. I just need to be able to deploy, as I do today, as a set of ASPX/ASCX with a single codebehind DLL. And that's working today with CodeBehind= ... it just has the originally mentioned Intellisense problem, which is really what I want to fix :)
Will post more as I identify what files might be relevant to the question...
Have you checked the Build Action on your project files? I have duplicated your issue by setting the Build Action on ArticleView.ascx.designer.cs to None. I can also compile when using CodeFile, etc..., I'm 99% sure that's your problem.
You are missing the [your-file].ascx.designer.cs file, which links your controls to your codebehind.
Just like CitizenBane suggestions, you need to right-click the file (or folders, or entire web project) and select "Convert to Application". Visual Studio will examine your ascx/aspx files for the server controls, and generate that designer file for you.
I actually ran into this myself, on a far larger scale... C#: How to convert a Website project to a Web Project
Check the answer.
This has happened to me before. Try right clicking the ascx/aspx and click on "Convert to Web Application". You may just be missing the generated controls. If you don't see it in the context menu, delete the designer generated file first.
CodeBehind is deprecated in .NET 2.0. I believe that only <= 1.1 uses "CodeBehind". Now it is "CodeFile" as you say.
Why do you not want to compile your code? If you compile you don't have to deploy your .cs files...
Why do you have the code behind for your ascx control as an aspx named page code behind?
A UserControl (ascx) usually has a codebehind of
CodeBehind="ArticleView.ascx.cs"
instead of what you have listed
CodeBehind="ArticleView.aspx.cs"
Notice the aspx instead of the ascx for a User Control.
That could be your problem... a simple typo or a copy and paste error. Couple possibilities come to mind:
Maybe you have the ascx control (User Control) specified above using a code behind file that is inheriting from System.Web.UI.Page instead of System.Web.UI.UserControl (that could be causing the Visual Studio errors).
You have the UserControl pointed at the code behind for a same name aspx page. Similar problem as #1 which would cause Visual Studio to get all confused.
Your files are name ArticleView.ascx and ArticleView.aspx.cs. This might confuse Visual Studio since I believe VS might expects a particular naming convention.
For a User Control (ascx) your files should be named:
ArticleView.ascx (CodeBehind="ArticleView.ascx.cs" Inherits="[NAMESPACE].ArticleView")
ArticleView.ascx.cs (inherits from System.Web.UI.UserControl)
ArticleView.ascx.designer.cs
For a Web From (aspx) your files should be named:
ArticlePage.aspx (CodeBehind="ArticlePage.aspx.cs" Inherits="[NAMESPACE].ArticlePage")
ArticlePage.aspx.cs (inherits from System.Web.UI.Page)
ArticlePage.aspx.designer.cs
This just happened to me in VS2010 after upgrading a web application project to .net 4.0.
The answer was to make sure you have targetFramework="4.0" set on the system.web/compilation section in web.config
i.e.
<system.web>
<compilation debug="true" targetFramework="4.0">
</system.web>

Resources