代码之家  ›  专栏  ›  技术社区  ›  Omar

ASP.NET编译和分离程序集

  •  0
  • Omar  · 技术社区  · 14 年前

    我不熟悉ASP.NET(使用MVC)处理的方式 .dll 文件,并希望知道发生以下行为的原因:

    在这两种情况下,都有一个主MVC应用程序和一个辅助MVC应用程序( MyApps.Secondary )在这两种情况下,辅助应用程序在操作中都有硬编码的视图位置。

    情景一

    当我移动 动态链接库 我的主MVC应用程序的第二个应用程序的 bin 我可以导航到辅助应用程序中的控制器的文件夹。

    方案二

    如果我移动 动态链接库 的第二个应用程序 不同的 文件夹(称为 extras )然后,在主Web应用程序下,我必须执行以下操作,以便通过主Web应用程序轻松导航到辅助应用程序内的某个操作/控制器:

    1 添加 myapps.二级 在编译部分的汇编部分下

    <compilation debug="true" targetFramework="4.0">
        <assemblies>
         <add assembly="MyApps.Secondary"/>
    

    2 添加文件夹 额外的 (文件夹 myapps.二级 位于探测元素中

    <probing privatePath="bin;extras"/>
    

    我想我的问题是,为什么这两个场景都有效,为什么我需要在场景2中做额外的工作?

    对…的回答 this question about the compilation element 说明 <compilation><assemblies> 元素用于编译 .cs .vb 文件,但在这两种情况下,我都没有这两种类型的文件。它可以用来编译吗 .aspx/.ascx 第二个应用程序的页面?如果它确实在编译 ASPX/.ASCX 文件,为什么不需要在第一个场景中包含程序集?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Tommy    14 年前

    您的辅助应用程序中确实有.cs和.vb文件,但它们已经编译为.dll。每个控制器文件、模型、分部类、存储库等都是.cs或.vb文件。

    要回答关于为什么必须做额外工作的问题,.NET默认情况下会在bin文件夹中查找程序集,以便在为运行时构建应用程序时包含这些程序集(以及服务器本身的其他一些位置,但这些位置与您的问题无关)。如果要包含不在b in文件夹中的程序集,必须告诉a)使用完全限定名注册它,b)程序集实际所在的位置。

    看一看 this link 来自参考文章的另一个答案,特别是关于web.config的assembly部分的最后几段。这可能有助于为你增加一些清晰的这(和我的闲谈)。