是否可以跨解决方案中的多个项目共享web.config?(ASP.NET)

时间:2010-10-24 08:44:26

标签: asp.net

我有一个由Web应用程序和多个项目组成的解决方案,是否可以在所有解决方案中共享Web应用程序中的配置?

由于

4 个答案:

答案 0 :(得分:8)

我看起来有可能,你可以试试以下:

您可以将web.config文件复制到解决方案的根文件夹中。然后创建解决方案文件夹(不属于您的任何项目)并在那里添加您的文件(通过Add Existing Item弹出菜单项)。从您的网站删除网络配置。之后,您可以从两个Web项目的弹出菜单中选择Add Existing Item,从解决方案根目录中选择您的web.config文件,然后单击Add As Link。之后,您将获得指向您的Web配置文件的链接,而不是解决方案中的真实链接。

alt text

另一方面,我不确定在不同项目之间共享web.config文件是否是一个好主意,因为通常web.config对每个单独的应用程序都有一些特定的condifuration。

答案 1 :(得分:5)

不,这是不可能的。需要将web.config文件放在每个网站的根文件夹中。您可以将一个公共web.config文件复制到每个站点的根目录作为项目的构建步骤,以便在运行时ASP.NET可以找到它。

答案 2 :(得分:0)

Web.config文件包含更高web.config文件设置的级联覆盖。因此,如果您将web.config放在IIS的根目录中,或者调整.NET框架的machine.config或标准web.config中的设置(C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG for例子)。

最好的例子可能是使用LocalSqlServer连接字符串。它在machine.config中定义为

<connectionStrings>
    <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;  
    Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;
    User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>

如果您将使用Login控件作为示例并将调试并请求连接字符串,那么也将包含此字符串。

因此,如果您需要多个应用程序共有的一些设置,请将它们放在层次结构中足够高的web.config文件中,最终放在machine.config中。

答案 3 :(得分:0)

还有另一种选择,那就是使用Pre-build命令将web.config从一个文件夹复制到目标文件夹。假设您有3个项目。项目A具有“主” web.config。

在项目B和项目C中,设置一个预构建版本,以将web.config复制到每个项目文件的根目录,从而覆盖这些文件夹中存在的web.config。

主要问题在于,每个被覆盖的web.config中可能都有特定的绑定。

如果您的目标是复制appSettings以及可能的连接字符串,则可以执行与上述相同的预构建,但是将appsettings和连接字符串保存在与web.config分开的文件中,然后专门打开设置文件并阅读使用WebConfigurationManager.OpenWebConfiguration方法使自己满意。