【发布时间】:2010-02-20 18:28:41
【问题描述】:
我正在使用 Fluent NHibernate 组织 VisualStudio 2008 解决方案,我希望将所有 NHibernate dll 依赖项隐藏在“后端”类库中,并让前端 Web 应用程序或控制台应用程序不了解 NHibernate。
我的解决方案结构如下:
BackEnd -- 类库 -- 业务逻辑和Data Repositories & public API..这个级别私下使用NHibernate进行数据存储,不向前端公开任何NHibernate类
Public -- 类库 --- 前端和后端都使用的没有依赖关系的 POCO 对象。后端使用 NHibernate 来持久化这些对象。
前端 -- 控制台应用程序和一个 MVC Web 应用程序 --(两个前端应用程序 (1) MVC2 Web 应用程序 && (2) 一个控制台应用程序)引用公共和后端项目和只需使用一些公共方法即可使用公共对象与后端进行交互。
我想做的只是在后端引用 NHibernate 及其许多依赖项,让前端应用程序只引用后端项目。但是,如果除了在后端引用它们之外,我没有在前端应用程序中引用 Nhibernate 的每一个依赖项,Fluent BackEnd 在运行时就会崩溃。这是当前端省略引用时它在抱怨找不到 nhibernate dll 时崩溃的后端代码:
public static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(SQLiteConfiguration.Standard.UsingFile(DbFile))
.Mappings(m => m.AutoMappings
.Add(AutoMap.AssemblyOf<EngineInfo>(type => type.Namespace.Contains("BackEnd"))
.Conventions.Add(DefaultCascade.All())
.Conventions.Add(DefaultLazy.Never())
)
) //emd mappings
.ExposeConfiguration(BuildSchema)//Delete and remake a fresh tmp db
.BuildSessionFactory();//finalizes the whole thing to send back.
}
可能是我不小心将 NHibernate 相关资源暴露给前端应用程序,但我没有收到任何编译时错误,我希望得到一点指导。
如果我确实引用了 Nhibernate 的 dll,一切都运行良好,但在我的前端应用程序中,我在编译时收到以下警告:
*
发现不同的冲突 相同依赖的版本 组装。
*
有什么建议吗?
--更新--
我已将必须在前端引用的 dll 缩小到 NHibernate.ByteCode.Castle.dll 和 System.Data.SQLite 我可以跳过所有其他的并且不会出现运行时错误.. 至少还没有。
我仍然不确定为什么需要任何一个,因为前端从不使用任何 NH 或 SQL lite 资源,除非通过不提供任何 Nhibernate 或 SQLite 资源的后端的公共接口。所有接触 NHibernate 或 SQLite 的类都被标记为 Internal,所以我不确定是什么导致了这种依赖。
visual studio 依赖警告提供了一个解决方案,我有点犹豫要不要应用,因为我不知道为什么首先会出现问题:
您想通过将绑定重定向记录添加到 appconfig 文件来解决这些冲突吗? --- MSDN 关于选项 -- http://msdn.microsoft.com/en-us/library/bb383993.aspx
有什么建议吗?
---更新--- 下面的汤姆似乎复制了我的问题,所以这开始听起来像一个 NHibernate dll 错误。我还尝试从 VS 2008 升级到 2010 并重建整个解决方案并在那里复制错误。在我尝试报告之前,有人想看看我们是否遗漏了什么?
【问题讨论】:
标签: c# visual-studio-2008 nhibernate fluent-nhibernate