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