在后面的页面中包含类库,C#ASP.Net

时间:2009-02-18 15:41:10

标签: c# asp.net class

使用我们受限制的系统意味着我不能将类库放入app_bin / bin / App_Code基本上任何普通文件夹,所以我目前正在链接到我的类库,如下所示......

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="~/cs/codebehind.cs" Inherits="codebehind"  %>
<%@ Assembly Src="~/cs/mycodelibrary.cs" %>

我试图解决的问题是如何将类库作为代码隐藏中的文件引用,所以我不需要在页面上有另外的东西,并且VS不再告诉我程序集中的内容不存在。

using "~/cs/regionalPages.cs"

快速添加,如上所述添加mycodelibrary.cs确实有效。我只是想找到一个更好的方法。

我应该重申我无法访问正常的.net文件夹,如果我这样做,我就不会问这个看似愚蠢的问题。

4 个答案:

答案 0 :(得分:2)

因此。你错过了真正的服务器。

为什么不使用App_Code文件夹让ASP.NET为您处理编译和引用路径?这就是它的用途。

修改:嗯。您说您无法访问App_Code,但是您有一个名为cs的文件夹,您可以在其中删除代码文件?这是一个非常奇怪的安排。首先限制访问权限的人会怎么想?

我没有得到的另一件事是你的mycodelibrary.cs将如何被编译。 ASP.NET处理App_Code文件夹中的编译,但不处理其他地方(或者我错了?)。

另一个编辑:好的,我现在已经知道了,并且已经尝试过了。 .aspx页面中的@Assembly指令确保编译代码文件,并且对页面的引用可用。然后引用也可以在代码隐藏中使用(即使使用intellisense),因为它是相同的(部分)类。

现在,您是否质疑如何在.aspx文件中没有@Assembly指令的情况下完成同样的事情(而不是代码隐藏中的某些内容)?我可以告诉你,至少,using没有形式可以做到这一点。老实说,我看不出有任何方法可以做到这一点,对不起。

Cerebrus提到在Web.config中使用代码库或探测器配置运行时,但这仅适用于已编译的程序集。

答案 1 :(得分:1)

首先,.cs文件不是程序集。必须先将其编译为DLL,然后才能将其视为程序集。

为了引用在页面级别导入的程序集中的代码,我相信您必须将服务器端代码与标记内联(而不是使用单独的aspx.cs文件)。

最好的问候......

答案 2 :(得分:1)

DLL的可以从您可能描述的“普通”文件夹中加载。但是,您需要指示ASP.NET从指定文件夹加载程序集,例如,使用配置文件中的codebaseprobing元素。

看看这个MSDN article,它解释了程序和语法。

答案 3 :(得分:1)

你走了:

  1. 首先创建一个新的用户控件:UC_TestingPOC.ascx,
  2. 创建一个新的类库:UserControlsCodeBehind,
  3. 在Class Libray下,为前面创建的用户控件添加类后面的代码:UC_TestingPOC.ascx.cs
  4. 在用户控件的顶部,添加以下行:

    <%@ Assembly Name ="UserControlsCodeBehind, Version=1.0.0.0, Culture=neutral, PublicKeyToken=00000000000000" %>
    <%@ Control Language="C#" AutoEventWireup="true" Inherits="UserControlsCodeBehind.UC_TestingPOC" %>