如何在网站项目的页面上使用其他C#源文件?

时间:2014-06-10 00:35:30

标签: c# asp.net web-site-project

编辑:{     我想我在这里添加了很多(太多)信息(阅读)。我想要的重要部分是:

  • 我使用的是网站(没有.csproj文件)
  • 我需要多个源代码文件来运行我的ASPX
  • 根据我的理解,我需要使用预编译的DLL或告诉.NET在请求ASPX文件时即时编译其他文件
  • 我不确定如何让这两种情况发挥作用
  • 如果在DLL上提供帮助,请告诉我使用什么语句并放入哪个文件(ASPX指令,web.config等等 - 不能使用.csproj)
  • 如果提供其他选项的帮助,请提供用于包含MULTIPLE源文件的语句,以及放置语句的位置(ASPX指令,web.config等, - 不能使用.csproj) - 我已经使用@Page CodeBehind / CodeFile,我需要多个源文件

}

我试图将其他C#源文件包含到我的ASPX文件中,但它无效。

我有Default.aspx(使用@ Page CodeFile =" Default.aspx.cs")并且想引用其他文件(例如LinkList.cs,SQLiteDB.cs,SQLServerDB.cs,JSON。 CS)。

我认为它应该是这样的(在Default.aspx文件中):

//<%@ Reference Page =" secondfile.cs" %GT;

我是ASP / .NET的新手,但对C#有一些经验,对PHP,JS,客户端 - 服务器模型等有很多经验。我尝试了各种方法来包含它们,但无济于事;下面列出的尝试。

我的设置使用网站(按需编译; App vs. Site),使用文本编辑器(非VS!)编辑远程文件。我从VS开始,但经过几个小时的调试后确定我的服务器需要各种不同的设置,而不是我的VS项目,我不想维护相同代码的多个版本......因此,我正处于截止日期,即使我可以让VS使用我的设置(欢迎评论),我主要关心的是让代码与服务器一起工作。

有效的方法:

  • 所有C#文件中的所有代码合并为一个,我的CodeFile,编译;问题是能够将每个类放在一个单独的文件中以保持可维护性。
  • 从上面的链接确定,我需要使用@Page CodeFile(NOT CodeBehind);我确定这会导致主C#文件加载

不能工作的事情:

  • HTML脚本标记(link);此方法确实会导致其他文件尝试编译,但在文件中使用'会出现错误,但即使我将“使用”文件移到主要源文件中也是如此,其他文件中的类不被识别为主C#文件中的数据类型。
  • <%@ Reference Page =" secondfile.cs" %GT; (错误:"文件' src'在这里不是有效的,因为它没有公开类型。&#34 ;;不确定它在哪里获得&#39 ; src'来自,我没有使用它,并且' src'不是引用的有效属性...)
  • ' App vs. Site' link指定目录中的所有文件都包含在编译中,但其他文件没有被编译...我的所有文件都在/ www / dev / *中,而我所有的C#文件都使用相同的命名空间
  • <%@ Assembly Name =" assemblyname" %GT;或<%@ Assembly Src =" pathname" %GT;

实际上使用以下操作似乎会导致文件加载,但我仍然收到错误:" CS0246:类型或命名空间名称' SQLServerDB'找不到(你错过了使用指令或汇编引用吗?)"

    <%@ Assembly Src="SQLServerDB.cs" %>
    <%@ Assembly Src="DataSource.cs" %>
  • 包括&#34;使用myNS.SQLServerDB&#34;产生相同的错误

我不知道还有什么可以尝试...请帮助。我也尝试过与其他asp指令的各种组合。

更新/澄清:我问的是,因为我使用网站设置(非Web应用程序),如何告诉ASP服务器使用CodeFile编译其他源代码?到目前为止,答案并没有解决这种情况的两个方面。 &#39;使用&#39;命令不会告诉编译器代码文件的位置,只是告诉编译器所需的类。

4 个答案:

答案 0 :(得分:4)

这是目前适用于我的两种解决方案。不幸的是我之前尝试过这些并且他们没有工作。我无法访问网络服务器设置,所以我不知道为什么他们之前没有工作。

  1. 正如@Alexei Levenkov建议的那样,使用App_Code目录。这对我来说以前没有用过,因为我刚接触过ASP.NET以及我曾经使用过的所有其他语言需要以某种方式明确指定所需的源文件,这个解决方案是外来的,我完全不会感到惊讶一开始没有意义。此外,(几乎)我发现的所有文档都在Web应用程序的上下文中引用了App_Code目录,因此我忽略了它,因为它似乎只是一个标准名称,我可以使用我想要的任何内容,而不是相应的魔术名称到.NET。

  2. 另一种解决方案是直接在.ASPX文件中的@Page指令下使用以下内容。注意:在&#34; App_Code&#34;中使用路径只适用于任何情况导致.NET无法注册&#34; App_Code&#34;作为魔术目录;我不知道这些情况是什么,我只知道它们是可能的,我遇到了它们。

  3.   

    &lt;%@ Assembly Src =&#34; App_Code / Utilities / SQLServerDB.cs&#34; %GT;

         

    &lt;%@ Assembly Src =&#34; App_Code / Utilities / Functions.cs&#34; %GT;

         

    &lt;%@ Assembly Src =&#34; App_Code / Utilities / Database.cs&#34; %GT;

         

    &lt;%@ Assembly Src =&#34; App_Code / Utilities / LinkedList.cs&#34; %GT;

         

    &lt;%@ Assembly Src =&#34; App_Code / DataObjects.cs&#34; %GT;

    另请注意:我发现这些解决方案与命名空间无关。我的意思是,这些解决方案会导致其他源文件在编译时链接在一起,并且与代码结构完全无关。任何文件都可以在任何可访问的目录中,并且可以都在同一名称空间或不同的名称空间中。其他人建议命名空间的评论不起作用,因为这不是我遇到的问题。每个源文件都需要&#34;使用&#34;虽然引用其他命名空间的语句;但这与源代码的位置无关。

    感谢所有提出建议的人!

答案 1 :(得分:1)

您可以添加其他类文件(例如LinkList.cs,SQLiteDB.cs,SQLServerDB.cs,JSON.cs),然后从Default.aspx.cs中实例化这些类。

答案 2 :(得分:1)

注意:我刚刚注意到问题使用Visual Studio排除规则,这是一个网站,而不是网络应用。因此,这个答案对提出的问题的用处有限。对于那些偶然发现这个问题的人来说,这可能是有用的。

将每个附加的.cs文件包含在项目中。这将编译到构建中的网站.dll。在每个这些额外的.cs文件中,都会有一个类,也许还有一个命名空间。

步骤1 :要包含.cs文件,请右键单击Visual Studios中的项目名称&#39; Solution Explorer。选择&#34;添加&gt;现有项目&#34;并导航到.cs文件。您可能希望在&#34;添加&#34;上使用dropp down。按钮和sleect&#34;添加为链接&#34;

第2步:您很可能需要使用using语句来访问Default.aspx.cs文件中的这些类。 E.g:

using System.Web.UI.WebControls; /*This should already be there**/
using [NameSpace].LinkList;
using SQLLiteDB;

第3步:您现在应该能够在Default.aspx.cs文件中实例化这些类。 E.g:

LinkList myList = new LinkList();

请注意,使用服务器控件的方式非常不同。也就是说,如果LinkList是一个生成某些HTML的控件,那么使用它的方式是非常不同。

答案 3 :(得分:1)

我相信您正在寻找App_code文件夹。

  

在网站项目中,您可以将源代码存储在App_Code文件夹中,并在运行时自动编译。 Web应用程序中的任何其他代码都可以访问生成的程序集。因此,App_Code文件夹的工作方式与Bin文件夹非常相似,只是您可以在其中存储源代码而不是编译代码。

将共享类放入App_Code文件夹中,并且应该为所有页面编译/显示它们。