我不熟悉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 - 在探测元素中添加文件夹extras
(MyApps.Secondary
所在的文件夹
<probing privatePath="bin;extras"/>
我想我的问题是,为什么这两种情况都有效?为什么我需要在情景二中做额外的工作?
this question about the compilation element的答案指出<compilation><assemblies>
元素用于编译.cs
和.vb
文件,但在我的两种情况下,我都没有文件。是否可以用于为辅助应用程序编译.aspx/.ascx
页面?如果它确实正在编译.aspx/.ascx
文件,为什么我不需要在第一个场景中包含程序集?
答案 0 :(得分:1)
您实际上在辅助应用程序中有.cs和.vb文件,但它们已经编译成.dll。每个控制器文件,模型,部分类,存储库等都是.cs或.vb文件。
要回答关于为什么必须做额外工作的问题,.NET默认情况下会在bin文件夹中查找程序集,以便在为运行时构建应用程序时(包括服务器本身的其他位置,但不是与你的问题相关)。如果要包含不在bin文件夹中的程序集,则必须告诉它a)使用完全限定名称注册它,以及b)程序集实际所在的位置。
从引用帖子的其他答案中查看this link,特别是关于web.config的assembly部分的最后几段。这可能有助于为你(以及我的随意)增加一些清晰度。