项目: 我的应用分两个部分:前端网站,后台管理程序
目的: 想将前台,后台,共用三个部分分3个项目单独作为独立互不影响的系统编译和发布,例如,将前台和后台都作为独立的project来开发,共用的控件,dll也作为独立的一个项目开发,以便前后台两个系统中,共享一些组件,例如可以做成一些公用的componet,供前后台两个project调用。
问题: 如何分出中间这个公用的项目呢? 如果是纯Class的C#项目,做个dll然后让前后台的程序项目参照就可以了。 可是,这个中间公用的部分,还包括user control控件,也就是有.ascx的文件。当我用VS.NET同时打开三个项目进行开发,中间公用项目中的用户控件ascx文件就无法被另外的两个项目引用,报"不能跨越不同的"application的错误.另外,公用部分,比如一些/Image文件,一些include的css文件等等,需要前后台共享的,这些文件夹我也不想重复,如何在项目之间共享呢? 但我也没法超越 /根目录去调用这些文件.请高手指点一下,如何划分和调用这个公用部分,以达到我的目的呢?

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/4658/4658311.xml?temp=4.088992E-02
    加入我们团队吧
    让高手和高手在一起飞得更高一点。让新手帮新手进步更快一点。
      

  2.   

    大概看了一下。当然可以啦。理论上NET开发就是这样的吗
      

  3.   

    一个工程没有二三十个project,那就不是工程
      

  4.   

    如果你的网站不大,前后台就不要分开目录算了,就在同一个目录里,所有UI资源公用。ASP.NET 1.x在处理这个问题时却是比较麻烦,UI资源都在Web目录中,显得很混乱。ASP.NET 2.0资源按照类别放到Web目录下的不同功能目录中,管理起来显得方便一些。如果你的网站确实大,那么最正规的做法只有一种,就是把UI资源放到resx里面然后编译到dll。例如这些gif和js是这个WebControl用的,就都编译到这个WebControl的dll里面,哪个项目引用这个WebControl它都自动释放资源到恰当的目录。至于UserControl,我个人不建议用,特别是有了ASP.NET 2.0的MasterPage和Skin功能后。UserControl实现的是类似ASP的include模型,include就是要考虑资源定位问题(虽然引用了"~"运算符用户本WebApp根目录的定位),所以UserControl在ASP.NET 1.x中主要用于Skin类的功能,到了ASP.NET 2.0就最好不要用了。就算你不用ASP.NET 2.0,也可以自己封装MasterPage功能(详细看CommunityServer 1.1)实现Skin,控件封装只用WebControl,从而避免用UserControl。
      

  5.   

    我们现在的Web项目因为是多人通过源代码管理进行团队合作开发的,所以我就设计成了楼主说的这种项目结构,一个解决方案分为十多个项目,每个模块都划分为一个独立的项目,项目对应的文件夹结构如下,我想楼主看了就明白该如何做:解决方案文件夹
      --解决方案sln文件
      --数据访问层(独立项目)
      --业务对象层(独立项目)
      --业务逻辑层(独立项目)
      --项目引用的外部dll文件专用文件夹(独立项目,不编译)
      --Web主项目(独立Web项目)
          --web.config
          --模块1(独立Web项目)
          --模块2(独立Web项目)
          --模块3(独立web项目)
          --更多web模块...
          --共享模块(用户控件等,设不设为独立项目都没关系)
          --图片(子文件夹)
          --脚本及样式表等(子文件夹)
          --...其它
          
    在Web主项目中添加对所有其它子模块项目的引用,这样对应的模块编译后生成的dll文件就会自动被复制到主项目下的bin文件夹中,无需手工复制,任何web项目中都可以引用主项目下的用户控件(因为该模块本身就是主项目下的一个子文件夹而已,是否是独立的项目和他们的目录结构毫无关系),将Web主项目设为启动项目,每次从Web主项目启动即可。
    只要脑筋能转一下弯,其实很多问题都不难解决的!=====================
    www.webdiyer.com
      

  6.   

    谢谢楼上webdiyer(陕北吴旗娃)的详细说明,我是笨鸟,再问一下, --Web主项目(独立Web项目)
          --web.config
          --模块1(独立Web项目)
          --模块2(独立Web项目)
          --模块3(独立web项目)
          --更多web模块...
    这里的模块目录是如何加进去的啊?我没有用过VS2005,我用的VS。net 2003 1.版, 是否是什么新的功能呢?再次感谢!
      

  7.   

    同意webdiyer(陕北吴旗娃)的看法 我们的项目开发也是一直沿用这样的模式
      

  8.   

    一个工程没有二三十个project,那就不是工程
    -------------------------------------------------
    怎么那么像大腕中的台词?
    赞同webdiyer的方法。
      

  9.   

    to suncode(石头) :
    虚拟目录都是事先设置好的。
      

  10.   

    为什么我不能在Solution设成这样呢?     --Web主项目(独立Web项目)
            --web.config
            --模块1(独立Web项目)
            --模块2(独立Web项目)
            --模块3(独立web项目)
            --更多web模块...
            --共享模块(用户控件等,设不设为独立项目都没关系)
            --图片(子文件夹)我只能设为以下的目录结构,每个目录单独立项目        --模块1(独立Web项目1,Test1.aspx)
            --模块2(独立Web项目2)        
            --Web主项目(独立Web项目)
                   --web.config
                   --图片(子文件夹)
                   --Test.aspx
                   --共享模块(用户控件control1.ascx 等)
    我在Test.aspx中可以引用control1.ascx,但Test1.aspx中引用control1.ascx控件,就报错:Parser Error Message: The virtual path '/共享模块/control1.ascx' maps to another application, which is not allowed.大侠们还是指点一下菜鸟吧.
      

  11.   

    纠正:报错如下:
    Parser Error Message: The virtual path '/模块1/control1.ascx' maps to another application, which is not allowed.
      

  12.   

    先按我说的目录结构创建好目录,然后将相应模块对应的目录创建为虚拟目录,然后再在vs中新建web项目,web项目名就是你的虚拟目录名
      

  13.   

    顶.webdiyer(陕北吴旗娃)的目录分的很清晰.
      

  14.   

    可以参看communityServer源码的结构
      

  15.   

    终于测试通过。但有个地方疑问:就是模块子目录也自动创建了Web.Config 文件, 运行的时候出现:
    Configuration Error 
    Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately. Parser Error Message: It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.Source Error: 
    Line 44:            by Microsoft that offers a single logon and core profile services for member sites.
    Line 45:     -->
    Line 46:     <authentication mode="Windows" /> 
    Line 47: 
    Line 48:  <!--  AUTHORIZATION 我将子目录的web.config删除,就正常。但是,如果子模块项目需要用web.config文件来设置数据连接等设置,如何办呢? 是共用主项目的web.config文件吗?关于分层目录的web.config文件的设置,我另起一贴提问,加100分给出。
      

  16.   

    你没必要删除子模块下的web.config,只需要删除其中的<authentication mode="Windows" /> 这个配置节就行,因为某些配置节只能在web项目根目录下的web.config中出现,另外关于数据库连接,一个web项目中应该只有一个连接而已,你可以把它放在根目录下的web.config中即可,因为你访问子模块都是从web主项目启动的,所以根目录下的web.config就是子模块的顶级web.config文件。====================
    www.webdiyer.com
      

  17.   

    现在ASP.NET 2.0在Framework里面采取了一种新的方法封装公共的UI素材,就是WebResource。你把素材添加到Resource,然后编译进dll,任何地方都可以通过WebResource.axd加上特定的QueryString引用。