当您需要共享规则时,如何在同一解决方案中管理不同项目中的web.config文件?

时间:2012-06-26 04:38:14

标签: asp.net visual-studio-2010 web-config

在我的解决方案中,我有2个项目,称之为FooBar。部署后,Foo是根网站(http://mycompany.com),Bar是子目录(http://mycompany.com/sub)。

当我在本地机器上的IIS Express中本地处理它们时,我需要将这些内容复制到两个项目的web.config中,因为我单独处理它们。例如,我在我的重写规则中有一个用于“缓存清除”的HMTL5 Boilerplate规则:

<rewrite>
    <rules>
        <rule name="Cachebusting">
            <match url="^(.+)\.\d+(\.(js|css|png|jpg|gif)$)" />
              <action type="Rewrite" url="{R:1}{R:2}" />
        </rule>
    </rules>
</rewrite>

如果我将它保留在Foo的web.config中,那么当我处理Bar时,它不会应用,因为重写没有发生,我会收到错误。所以我已经将两个项目的部分复制到了web.config中。

但是当我将解决方案发布到Azure时,由于Foo的web.config位于根目录中,因为继承规则而导致冲突。

管理此问题的最佳方法是什么?我试图搜索这个主题,但找不到这个确切的问题。

更新

我对IIS Express的applicationhost.config是这样的:

        <site name="Bar" id="3">
            <application path="/" applicationPool="Clr4IntegratedAppPool">
                <virtualDirectory path="/" physicalPath="E:\Code\mycompany\Bar\Bar" />
            </application>
            <bindings>
                <binding protocol="http" bindingInformation="*:65052:localhost" />
            </bindings>
        </site>
        <site name="Foo" id="4">
            <application path="/" applicationPool="Clr4IntegratedAppPool">
                <virtualDirectory path="/" physicalPath="E:\Code\mycompany\foo" />
            </application>
            <bindings>
                <binding protocol="http" bindingInformation="*:50477:localhost" />
            </bindings>
        </site>

我尝试编辑它以使两个应用程序成为同一站点的一部分,但这些更改却没有运气。似乎打破了一切:)

        <site name="Foo" id="3">
            <application path="/" applicationPool="Clr4IntegratedAppPool">
                <virtualDirectory path="/" physicalPath="E:\Code\mycompany\foo" />
            </application>
            <application path="/Sub" applicationPool="Clr4IntegratedAppPool">
                <virtualDirectory path="/" physicalPath="E:\Code\mycompany\Bar\Bar" />
            </application>              
            <bindings>
                <binding protocol="http" bindingInformation="*:65052:localhost" />
            </bindings>
        </site>

2 个答案:

答案 0 :(得分:0)

将您的根网站(http://mycompany.com)设置为IIS中的网站,将您的子目录设置为IIS中的虚拟目录。

IIS与虚拟目录共享根网站(的web.config)中定义的规则。

答案 1 :(得分:0)

使用web.debug.configweb.Release.config来管理开发和发布环境差异。有关详情,请关注this SO POSTthis MSDN blog