我试图将所有数据库代码抽象到一个单独的库中,然后在我的所有代码中使用该库。所有数据库连接都是使用类型化TableAdapters完成的,这是我使用appSettings中的连接字符串在VS2005中通过拖放数据集创建的。
我一直未能解决的问题是,.Net不会将库appSettings传播给正在使用它的其他项目。
简而言之,我有一个数据库层库,MyProgram.DbLayer,它被其他项目使用,比如MyProgram.Client等。当我拥有.Client中的所有数据集时,connectionString是在MyProgram.Client.exe.config中,这样我就可以在构建后对其进行更改。当我将它移到MyProgram.DbLayer中时,在我构建二进制文件之后,这个设置对我来说是不可用的。
编辑:这似乎是ApplicationSettings的一个更普遍的问题。
我注意到的是,如果我手动添加一个仅在库中使用的设置,它将被正确读取。我现在唯一需要的就是将该设置自动包含在.config文件中。
发布于 2008-12-09 15:14:26
AppSettings/ConnectionStrings将始终从当前运行的应用程序池中读取。
我的意思是:
如果我有一个类为DAL.cs的A.exe。DAL.cs从配置中读取连接字符串,并按预期返回"abc"。
然后,我将DAL.cs移到它自己的项目中,从而移到它自己的程序集中。我仍然可以让它从app.config调用连接字符串,但是,我需要在运行的应用程序中“托管”程序集,并将连接字符串添加到该应用程序的应用程序配置中。因此,我创建了一个新的app.config,并在其中指定了连接字符串"xyz",当它运行时,它会像预期的那样运行。
现在,如果我更改A.exe项目中的引用以使用新的DAL.dll,您认为它将具有什么连接字符串?"xyz"?不是的!它将像以前一样使用"abc",因为它仍然在A.exe的应用程序配置文件中进行配置。
我知道这是可行的,因为我在许多Windows 和 Web应用程序中使用了共享DAL代码。
如果其中任何一个不清楚,或者对您的问题没有帮助,请通过对此答案的评论来让我知道。
更新来自OP的以下评论
我所说的“主机”是指调用公共代码的应用程序。这可以是Windows或Web应用程序,基本上它是应用程序上下文。
您需要在配置文件中为使用公共代码的每个应用程序创建条目。如果我误解了您最初的问题(完全有可能,这是漫长的一天!)并且您还希望集中化配置,那么您需要:
希望这能有所帮助:)
发布于 2008-12-09 15:22:30
如果我没弄错你的问题,听起来你需要
1.)所有数据访问调用的通用应用程序上下文
或
2.)访问配置设置的不同方式
1:将您的数据层包装在运行于单个上下文(IIS、Windows服务等)下的服务中
2:不要使用您提供的配置管理机制。取而代之的是使用特定位置的属性文件。
但不要忘记,配置设置是从不同的级别级联的。对于example...if,您在machine.config中添加一个设置,然后在该计算机上运行的每个应用程序都将使用该设置,除非在较低的level...That中替换它可能是在您的配置文件中设置标准化设置的好方法。
https://stackoverflow.com/questions/353013
复制相似问题