0

我正在尝试将所有数据库代码抽象到一个单独的库中,然后在我的所有代码中使用该库。所有的数据库连接都是使用类型化的 TableAdapter 完成的,我在 VS2005 中通过拖放数据集创建,使用来自 appSettings 的连接字符串。

我无法解决的问题是 .Net 不会将库 appSettings 传播到正在使用它的其他项目。

简而言之,我有一个数据库层库 MyProgram.DbLayer,它被 MyProgram.Client 等其他项目使用。当我在 .Client 中拥有所有数据集时,connectionString 位于 MyProgram.Client.exe.config 中,这样我可以在构建后更改它。当我将它移到 MyProgram.DbLayer 中时,该设置在我构建二进制文件后对我不可用。

编辑:这似乎是 ApplicationSettings 的一个更普遍的问题。

我注意到的是,如果我手动添加仅在库中使用的设置,它将被正确读取。我现在唯一需要的是将设置也自动包含在 .config 文件中。

4

2 回答 2

1

AppSettings/ConnectionStrings 将始终从当前运行的应用程序池中读取。

我的意思是:

如果我有A.exe哪个有类DAL.cs。DAL.cs 从配置中读取连接字符串,并按"abc"预期返回。

然后我将 DAL.cs 移到它自己的项目中,从而移到它自己的程序集中。我仍然可以让它从 app.config 调用连接字符串,但是,我需要在正在运行的应用程序中“托管”程序集,并将连接字符串添加到该应用程序 app config。因此,我创建了一个新的 app.config 并在其中指定连接字符串"xyz",当它运行时,它按预期运行。

现在,如果我将A.exe项目中的引用更改为使用 new DAL.dll,您认为它将具有什么连接字符串?"xyz"? 没有!它将"abc"像以前一样使用 ,因为它仍然在应用程序配置文件中为A.exe.

我知道这是可行的,因为我在许多 Windows和Web 应用程序中使用了共享 DAL 代码。

如果其中任何一个不清楚,或者对您的问题没有帮助,请通过评论此答案让我知道。

更新来自 OP 的以下评论

“主机”是指调用公共代码的应用程序。这可以是 Windows 或 Web 应用程序,基本上它是应用程序上下文。

您需要在配置文件中为使用公共代码的每个应用程序创建条目。如果我误解了您最初的问题(完全有可能,这是漫长的一天!)并且您也希望集中配置,那么您需要:

  • 创建某种形式的集中式存储(无论是 XML、DB 等)。
  • 增强您的通用代码以使其具有默认值,以使其能够连接到集中式存储。
  • 然后,代码可以从那里根据配置存储中的信息进行自我配置。

希望这可以帮助 :)

于 2008-12-09T15:14:26.100 回答
1

如果我正确理解您的问题,听起来您需要

1.) 所有数据访问调用的通用应用程序上下文

或者

2.) 访问配置设置的不同方式

1:将数据层包装在在单个上下文(IIS、Windows 服务等)下运行的服务中

2:不要使用提供给您的配置管理机制。而是使用特定位置的属性文件。

不要忘记配置设置是从不同级别级联的。例如...如果您在 machine.config 中添加一个设置,那么在该计算机上运行的每个应用程序都将使用该设置,除非它被替换为较低级别...这可能是在您的内部设置标准化设置的好方法配置文件。

于 2008-12-09T15:22:29.717 回答