在VS2012中发布Web时出现问题

时间:2013-04-18 10:47:40

标签: asp.net-mvc deployment visual-studio-2012 unity-container

正在处理具有不同层的MVC项目(主项目MVC Web其他项目是Bin指向MVC web Bin文件夹的类库),使用Unity进行依赖注入。

在我的本地机器上运行时一切都很好。如果我发布我的网页并浏览应用程序

给定的程序集名称或代码库无效。

var container = new UnityContainer();
container.LoadConfiguration();        //Error line

我花了一些时间来查看问题并发现在我发布的Bin文件夹中我的业务和数据访问DLL丢失了?

这是因为Unity吗?因为我的界面通过统一引用了商业层?

我是否遗漏了某些内容或我如何发布没有任何问题?

PS:如果我复制DLL并放入虚拟目录文件夹,一切看起来都很好。

由于

1 个答案:

答案 0 :(得分:2)

在Web项目中,或任何使用依赖项注入的最终项目(可能是WPF或Silverlignt应用程序,甚至是经典的ASP.NET),所使用的所有二进制文件应该可用即可。

想象一下,您有Lib1.dllLib1.Impl.dll,分别是API库和API的具体实现。现在,在Web项目中,您依赖依赖注入,为您提供Lib1.dll接口的具体实现。您可能永远不会在该应用程序中直接使用Lib1.Impl.dll中的类。仍然, DI框架需要访问 Lib1.Impl.dll才能实例化依赖项。

根据DI框架和加载依赖项支持的功能,您应该相应地提供它们。将它们全部放在bin文件夹中或直接由最终项目引用似乎很简单 - 这可能是您在bin文件夹中提供实现dll-s时项目工作的原因。但是,由于这与解耦的考虑不一致,您可能必须查看动态加载dll-s的替代方法 - 例如物理位置。我确信Unity支持这种机制,因为企业库中的模块化允许从文件系统位置引导模块。

我必须说,虽然我提到了解耦和保持引用分开,但如果你在项目层次结构的最后一层(Web应用程序)中引用它们,则不是问题只要您没有在该应用程序中导致耦合的代码。