我知道错误信息是常见的,关于这个错误有很多问题,但到目前为止还没有解决方案帮助我,所以我决定提出这个问题.与大多数类似问题的区别在于我使用App_Code目录.
错误信息:
CS0012: The type 'Project.Rights.OperationsProvider' is defined in an
assembly that is not referenced. You must add a reference to assembly
'Project.Rights, version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
Run Code Online (Sandbox Code Playgroud)
源文件:
c:\inetpub\wwwroot\Test\Website\App_Code\Company\Project\BusinessLogic\Manager.cs
Run Code Online (Sandbox Code Playgroud)
以下的建议在这里和这里,我已经删除了Project.Rights.dll的所有实例中C:\ WINDOWS\Microsoft.NET /*.*根据这个,我检查,如果有问题的.cs文件具有生成操作设置为"编译" .他们是这样.我还仔细检查了包含"Project.Rights.OperationsProvider"类型的.cs文件是否已部署到App_Code目录.
出于某种原因,应用程序不在App_Code目录中查找类型.由于我删除了Project.Rights.dll的所有实例(我知道),我不知道错误消息提到哪个程序集.
我在"App_Code"文件夹中的文件中有一个类.我可以在"aspx"文件中使用它,但不能从代码隐藏文件中使用它.如何让代码隐藏可见?
注意:这是Mono上的ASP.Net,我直接编写类,而不是使用IDE来编译它们
我的文件:
<%@ Page language="c#" src="TestAppCode.aspx.cs" Inherits="TestAppCode.TestAppCode" AutoEventWireup="true" %>
<html>
<head>
<title>Test App_Code Folder</title>
</head>
<body>
<form id="contactForm" runat="server">
<asp:TextBox id="Name" runat="server" ></asp:TextBox>
<asp:TextBox id="Age" runat="server" ></asp:TextBox>
<asp:Button ID="Submit" runat="server" Text="Submit" onclick="SubmitForm" />
</form>
</body>
<html>
Run Code Online (Sandbox Code Playgroud)
using System;
using System.Web.UI.WebControls;
namespace TestAppCode
{
public class TestAppCode : System.Web.UI.Page
{
protected void SubmitForm(object sender, EventArgs e)
{
//It fails here with the error: CS0246: The type or namespace name
//`MyAppCodeClass' could not be found. Are you missing …Run Code Online (Sandbox Code Playgroud) 在ASP.NET Webform中,App_Code是放置代码并在运行时使用它的标准文件夹.但我认为这个文件夹在ASP.NET MVC中有所不同,我的问题是:
我应该把我的代码(扩展方法,助手,...)放在ASP.NET MVC中.当我将代码存储在App_Code文件夹中时,我不能使用主题,controller但它们可以正常工作views.
关于Entity Framework,同样的问题,我应该把edmx和tt文件放在哪里.我没有使用Code-First
更新:
某些搜索后,终于我创建了一个新的类库在我的解决方案项目,代码是在所有可用的controllers和views.我仍然不知道为什么App_Code控制器中没有代码
ASP.NET具有特定的应用程序文件夹,例如App_Code:
包含要作为应用程序的一部分进行编译的共享类和业务对象(例如,.. cs和.vb文件)的源代码.在动态编译的Web站点项目中,ASP.NET会根据对应用程序的初始请求编译App_Code文件夹中的代码.检测到任何更改后,将重新编译此文件夹中的项目.
问题是,我正在构建一个Web应用程序,而不是一个动态编译的Web站点.但是我希望能够直接在C#中存储配置值,而不是通过XML提供服务,并且必须在读取Application_Start和存储期间读入HttpContext.Current.Application
所以我有以下代码/App_Code/Globals.cs:
namespace AppName.Globals
{
public static class Messages
{
public const string CodeNotFound = "The entered code was not found";
}
}
Run Code Online (Sandbox Code Playgroud)
这可能是应用程序中的任何位置,如下所示:
string msg = AppName.Globals.Messages.CodeNotFound;
Run Code Online (Sandbox Code Playgroud)
目标是能够将任何文字存储在可以更新的可配置区域中,而无需重新编译整个应用程序.
我可以.cs通过将其构建操作设置为编译来使用该文件,但这样做会App_Code/Globals.cs从我的输出中删除.
问:有没有办法识别项目的某些部分,这些部分应该动态编译,同时允许项目的其余部分进行预编译?
content- .cs文件将被复制到该bin文件夹并在运行时编译.但是,在这种情况下,它在设计时不可用. compile- 我可以在设计/运行时期间访问与任何其他编译类相同的对象,但在发布时它将被删除/ App_Code文件夹.我仍然可以将它放在输出目录中Copy Always,但是已编译的类似乎优先,所以我不能在不重新部署整个应用程序的情况下推送配置更改.我有一个实现该IRouteConstraint接口的基类。我正在尝试扩展该类并覆盖Match()基类中定义的方法。这适用于使用Visual Studio 2013 Update 2的ASP.NET MVC5应用程序。
我的课程结构如下:
\ Project \ App_Code \ BaseRouteConstraint.cs:
namespace Website {
public class BaseRouteConstraint: IRouteConstraint {
public virtual bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) {
...code
}
}
}
Run Code Online (Sandbox Code Playgroud)
\ Project \ App_Code \ DerivedRouteConstraint.cs:
namespace Website {
public class DerivedRouteConstraint: BaseRouteConstraint {
public override bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) {
if(!base.Match(httpContext, route, values, routeDirection) {
...code
}
}
} …Run Code Online (Sandbox Code Playgroud) 我有时会定义Business Logic类来"帮助"我的ASPX代码隐藏类.由于它们协同工作,因此将它们包含在代码隐藏文件中对我来说是最有意义的.但是,我偶尔会喜欢从App_Code中定义的更高级别的类访问Business Logic类,但它们不能在文件外自动访问.
因此,问题是:访问App_Code中定义的类很容易,但是如何访问其他地方定义的类?
更新:另一件事,ASPX页面类和App_Code类在同一名称空间 - 这不是问题.
注意:我已经接受了那些已经做出回应的人的建议(谢谢你们)并且我正在重构以使类访问更容易.但是,我认为这个问题实际上还没有得到解答(在ASP.NET网站项目的情况下).我不再需要答案了,但是,如果有人能够澄清当他们在App_Code之外时可以看到什么类,那么它可能会帮助其他人(甚至是我,在路上).
我创建了一个新项目(C#中的Web项目).在我的项目中创建了一个名为App_Code的新文件夹.然后我继续添加一个具有以下内容的类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Shipper.DataLayer;
namespace Shipper.BusinessLayer
{
public static class BL
{
public static int JustSomeTest()
{
return 1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
default.aspx在我尝试做的代码背后的一个页面中:
int i = BL.JustSomeTest();
当我输入时,我没有得到任何智能感知BL..它说我缺少装配或参考.或者它会说The name BL does not exist in the current context.但是如果类文件在同一个项目中,我是否必须包含引用?我甚至尝试构建我的项目,它首先生成了一个带有我的解决方案文件名称的dll文件,Shipper.dll但是只要我添加这个引用它就会说The name BL does not exist in the current context.
在我的default.aspx页面中,我试图添加一个using语句
using Shipper.
但是一旦我这样做,我的命名空间BusinessLayer就没有显示......我很困惑?
这是default.aspx:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; …Run Code Online (Sandbox Code Playgroud) asp.net ×6
c# ×5
.net ×1
app-code ×1
asp.net-4.0 ×1
asp.net-mvc ×1
code-behind ×1
csproj ×1
mono ×1