ASP.NET编译和单独的程序集

时间:2010-07-08 02:20:32

标签: asp.net asp.net-mvc dll

我不熟悉ASP.NET(使用MVC)处理.dll文件的方式,并想知道为什么会出现以下行为:

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

情景一

当我将辅助应用程序的.dll移动到我的主要MVC应用程序的bin文件夹时,我可以导航到辅助应用程序中的控制器。

情景二

如果我将辅助应用程序的.dll移动到我的主要Web应用程序下的 不同的 文件夹(称为extras),那么我必须执行以下操作才能通过主Web应用程序轻松导航到辅助应用程序内的某个操作/控制器:

1 - 在编译部分的程序集部分下添加MyApps.Secondary

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

2 - 在探测元素中添加文件夹extrasMyApps.Secondary所在的文件夹

<probing privatePath="bin;extras"/>

我想我的问题是,为什么这两种情况都有效?为什么我需要在情景二中做额外的工作?

this question about the compilation element的答案指出<compilation><assemblies>元素用于编译.cs.vb文件,但在我的两种情况下,我都没有文件。是否可以用于为辅助应用程序编译.aspx/.ascx页面?如果它确实正在编译.aspx/.ascx文件,为什么我不需要在第一个场景中包含程序集?

1 个答案:

答案 0 :(得分:1)

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

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

从引用帖子的其他答案中查看this link,特别是关于web.config的assembly部分的最后几段。这可能有助于为你(以及我的随意)增加一些清晰度。