【发布时间】:2016-07-26 23:05:16
【问题描述】:
我有一个 ASP.NET Web 应用程序的多个实例,除了包含特定于实例的设置的 web.config 文件外,它们在各方面都是相同的。为了避免拥有同一组文件的多个副本,我想将全部或部分 web.config 文件放在 IIS 虚拟文件夹中。
我在站点根文件夹下创建了一个 IIS 虚拟文件夹“config”,并在 web.config 文件中使用以下行来引用它:
<appSettings configSource="config\\app.config" />
不幸的是,IIS 在站点根文件夹下查找名为“config”的物理路径,并在找不到时报错。
有谁知道欺骗 IIS 使用 IIS 虚拟文件夹的方法吗?我也开放任何关于如何实现相同目标的建议(包括服务器端代码)(使用相同的文件夹来服务于同一网站的多个实例,仅通过 appSettings 不同)。
我也考虑过将所有内容转储到一个虚拟的“web”文件夹中,但这需要重新建立近 200 个文件中的所有引用。在这里使用标签不是一个可行的解决方案,因为它重新构建了包括相同页面引用在内的所有内容,但莫名其妙地不适用于对 .less 文件的引用。
编辑:虽然想法是为多个实例使用同一个文件夹,但我想明确指出,每个实例都将在 IIS 中设置为单独的网站/应用程序。只是每个实例都会指向同一个物理文件夹。
【问题讨论】:
-
不需要放在另一个文件夹中。如果我正确理解了您当前的设置,
app.config仍然可以位于web.config旁边的根目录中。我通常将其命名为_app.config,并在web.config文件中包含<appSettings file="_app.config">。连接字符串也一样,即_ConnectionStrings.config和<connectionStrings configSource="_ConnectionStrings.config" /> -
@Nkosi 正如我的帖子中所述,应用程序的每个实例都需要自己的 app.config 文件,因此 app.config 文件的位置要么需要通过 IIS 虚拟化,要么需要以某种方式根据服务器端代码中的请求 url 以编程方式更改。显然 IIS 路由无法完成,所以我希望有一种方法可以通过服务器端代码来完成。
-
好的,我明白了。
-
在
App_Data中创建一个文件夹怎么样。假设App_Data/config在该文件夹中,您将拥有基于约定的文件。类似于 sitex.json 或 .config 或 .xml 之类的站点/应用程序,或者您在代码中为每个站点 {guid}.config 映射的某个 id ....然后您可以根据传入的请求加载文件。如果您不希望根配置中的文件,您可以为每个站点创建一个文件夹App_Data/sitex/app.config