2009-07-03 54 views
0

我创建了一个类库,其中包含三个数据库的其他类必须连接的三个实体模型。这个类库然后被三个不同的Web服务和一个网站使用。这些都安装在他们自己的服务器上,所以没有简单的方法让他们共享相同的连接数据。切换连接字符串

在我的web.config文件,我这一行:

<connectionStrings configSource="Dependencies.ConnectionStrings.Config"/> 

这将从一个单独的XML文件中加载连接字符串。它工作正常,但它也意味着我现在有5个不同的这个Dependencies.ConnectionStrings.Config文件的副本。我宁愿在开发过程中使用单个文件。

但是,我的解决方案还包含四个安装项目,在这些设置中,配置文件必须彼此相邻。

那么如何告诉VS在不修改web.config的情况下在多个项目之间共享单个配置文件呢?


为了使它稍微复杂一点,类库使用app.config来存储连接字符串。我无法告诉app.config将连接字符串链接到单独的配置文件,显然... 另一个复杂因素是连接字符串需要在安装后由系统管理员修改。这是因为它将不得不寻找与开发数据库不同的数据库。 (实际上,在开发过程中,我使用3个数据库来分割实体逻辑,测试和生产环境只使用一个数据库。)
我目前的解决方案很简单。我已将Dependencies.ConnectionStrings.Config文件添加到解决方案中的单独文件夹,并定期将其拖放到其他项目中以更新它们。虽然这个工作,它是容易出错...

回答

1

最大的问题是你不能在文件夹层次当前主要的配置文件,这使其分享这些困难链接配置文件。

你有没有考虑过把它放在配置层次结构的更高层 - 可能在root web.config或machine.config?

另一种方法是让一些预构建事件构建这些文件,因此您不必担心有多个副本。当我需要为每个开发人员创建不同的连接字符串时,我已经非常成功地使用了prebuild选项。

+0

根web.config也是一个很好的位置,但连接字符串有时会在开发和测试期间更改。修改简单的XML文件对于那些对IIS本身没有任何经验的测试人员来说更容易一些。 (这就是为什么我需要创建设置。) – 2009-07-03 08:02:19

1

我不知道是否可以在不修改文件的情况下执行所要求的操作。

我同意这将是如果你有可能被所有服务器上使用一个文件要好得多,那么你将不会有版本问题,等等

说实话,整个安装听起来很复杂,如果说错误的配置文件结束在错误的服务器上,可能容易出错。

我会试图将连接信息集中在共享数据库中。您可以记录每个服务器应该使用的连接字符串(存储在服务器名称中)。这样每个服务器就知道它应该使用哪个连接字符串。这当然假定你的服务器可以联系一个中央数据库服务器(取决于你的设置)。

当然,还有其他方法可以获得理想的效果,但是我认为如果您“自己推出”而不是尝试弯曲内置应用程序设置以实现自己想要的效果,则可以获得更优雅的解决方案。