我有一个由Web应用程序和多个项目组成的解决方案,是否可以在所有解决方案中共享Web应用程序中的配置?
由于
答案 0 :(得分:8)
我看起来有可能,你可以试试以下:
您可以将web.config
文件复制到解决方案的根文件夹中。然后创建解决方案文件夹(不属于您的任何项目)并在那里添加您的文件(通过Add Existing Item
弹出菜单项)。从您的网站删除网络配置。之后,您可以从两个Web项目的弹出菜单中选择Add Existing Item
,从解决方案根目录中选择您的web.config文件,然后单击Add As Link
。之后,您将获得指向您的Web配置文件的链接,而不是解决方案中的真实链接。
另一方面,我不确定在不同项目之间共享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方法使自己满意。