2010-07-08 66 views
0

我不熟悉的方式ASP.NET(使用MVC)与.dll文件涉及,并想知道为什么会出现以下行为:ASP.NET编译和独立的组件

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

方案一

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

两个方案

如果我提出的二次应用的.dll下我的主要的Web应用程序不同文件夹(称为extras),然后我必须做的,以下列轻松通过主Web应用程序导航到二级应用程序中的其中一个操作/控制器:

1- Add MyApps.Secondary under the assemblies位于统计部

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

2-的部分添加的文件夹extras(其中MyApps.Secondary在探测元件located`

<probing privatePath="bin;extras"/> 

我想我的问题是,为什么两者的文件夹这些场景有效,为什么我需要在场景二中做额外的工作?

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

回答

1

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

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

从引用的帖子上的其他答案看看this link,尤其是关于web.config的程序集部分的最后几段。这可能有助于为你添加一些清晰的内容(和我的ramblings)。

+0

很酷,你知道是否可以实现'场景一'而不必将DLL放入bin文件夹?理想情况下,只需将它们放入另一个文件夹即可将它们放入'bin'文件夹中。 ''元素不会单独做它。 – Omar 2010-07-08 04:36:01