none
修改了Web.config文件到底会不会引发Asp.net程序重启????为什么网上有的说有,有的说没有?官方文档也没提??? RRS feed

  • 问题

  • 在网上看到,“在asp.net中,web.config修改保存后会自动立刻成效,不用再像asp中的配置文件修改后需要重新启动web应用程序才能生效了。”及“在Web应用程序运行时,对Web.config文件的修改不需要重启服务就可以生效”
    上面说的是,修改web.config不会引发重启。
    而我又看到了“另外一个注意事项是ASP.NET runtime将随时监视web.config,一旦web.config有了改动,ASP.NET将重新启动应用程序。具体的说 ASP.NET运行时将根据你更改web.config所在的应用程序域,重新建立应用程序对象实例。重建实例对性能有显著影响,所以不应该经常修改web.config。”
    这句又说,修改web.config会引发重启。

    到底是怎么回事啊?到底会不会引发重启?是与.net framework有关吗???

    {我在本身上就的是VS2008,测试项目是2.0的,我又测试了在线的一个网站,是1.1版本的,对结果是一个重启一个不重启???汗,难位能给个准确的回复,到底会不会重启?}
    2009年8月14日 23:28

答案

  • 一个重启服务一个重新启动应用程序,说的明明不是一回事嘛

    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年8月15日 1:14
    版主
  • 你好,修改Web.config会引起Web程序重新编译,这个编译是自动的,ASP.NET Runtime将随时监视Web.config,一旦web.config有了改动,ASP.NET将重新编译程序!同理,App_Code文件夹里面的类也有这样的现象。

    还有,你上面两个情况,是作者在不同的环境的建议,一个是开发期间,一个是生产期间。生产期间不建议随便修改配置文件,开发期间修改很方便改了就生效了!
    jon.valett@gmail.com
    2009年8月15日 3:42
    版主
  • 我刚查到一个文章:其中“在运行时对Web.config”文件的修改不需要重启服务就可以生效(注:<processModel>节例外)
    。net帮你重启了,所以你自己无需重启

    【孟子E章】
    2009年8月16日 13:38
    版主

全部回复

  • 一个重启服务一个重新启动应用程序,说的明明不是一回事嘛

    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年8月15日 1:14
    版主
  • ??重启服务与重启应用程序有什么不同?一样吧?
    2009年8月15日 3:02
  • 你好,修改Web.config会引起Web程序重新编译,这个编译是自动的,ASP.NET Runtime将随时监视Web.config,一旦web.config有了改动,ASP.NET将重新编译程序!同理,App_Code文件夹里面的类也有这样的现象。

    还有,你上面两个情况,是作者在不同的环境的建议,一个是开发期间,一个是生产期间。生产期间不建议随便修改配置文件,开发期间修改很方便改了就生效了!
    jon.valett@gmail.com
    2009年8月15日 3:42
    版主
  • 一个服务里面可以跑多个应用程序

    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年8月15日 3:45
    版主
  • "在asp.net中,web.config修改保存后会自动立刻生效,不用再像asp中的配置文件修改后需要重新启动web应用程序才能生效了 ",请问这是在重新编译后,才立刻生效的吧。
    但确有

    <section name="appSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0,Culture=neutral,  PublicKeyToken=b03f5f7f11d50a3a"
    restartOnExternalChanges="false" requirePermission="false" />
    asp.net程序会被重启。为了防止程序重启,要修改machine.config 文件

    上面的方法阻止了重新编译,但web.config中却也生效了。??????
    2009年8月15日 3:53
  • 很难很难明白你讲的意图啊,哎
    2009年8月15日 3:54
  • 你好,修改Web.config会引起Web程序重新编译,这个编译是自动的,ASP.NET Runtime将随时监视Web.config,一旦web.config有了改动,ASP.NET将重新编译程序!同理,App_Code文件夹里面的类也有这样的现象。

    还有,你上面两个情况,是作者在不同的环境的建议,一个是开发期间,一个是生产期间。生产期间不建议随便修改配置文件,开发期间修改很方便改了就生效了!
    jon.valett@gmail.com

    您的话的意思是:只要修改Web.config就会引发重新编译是吗?{不分.net版本是吗?}
    2009年8月15日 3:59
  • 是的,这里有关于配置文件的官方机器翻译文档,请参考

    http://support.microsoft.com/default.aspx/kb/307626/zh-cn
    jon.valett@gmail.com
    2009年8月15日 4:01
    版主
  • 补充,配置设置在编译好后将被缓存起来,供以后的请求使用,直到其中一个配置文件被修改。更改某些信息不需要重新编译代码,例如数据库连接。
    jon.valett@gmail.com
    2009年8月15日 4:04
    版主
  • 是的,这里有关于配置文件的官方机器翻译文档,请参考

    http://support.microsoft.com/default.aspx/kb/307626/zh-cn
    jon.valett@gmail.com
    谢谢,我这就看看。

    我还有一点不明白:是不是,修改的内容,只有在重新编译时,才生效呢?如果是,那以下,就太让人费解了

    asp.net程序会被重启。为了防止程序重启,要修改machine.config 文件
    <section name="appSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0,Culture=neutral,  PublicKeyToken=b03f5f7f11d50a3a"
    restartOnExternalChanges="false" requirePermission="false" />

    2009年8月15日 4:10
  • 你好,程序一定要编译后才生效,不编译的话,程序集还是原来的不会生效。

    <section name="appSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0,Culture=neutral,  PublicKeyToken=b03f5f7f11d50a3a"
    restartOnExternalChanges="false" requirePermission="false" />

    其中,restartOnExternalChanges设置为false,是告诉运行时,以后我修改WebConfig的appSettings不要重启程序了。
    jon.valett@gmail.com
    2009年8月15日 4:18
    版主
  • 你好,程序一定要编译后才生效,不编译的话,程序集还是原来的不会生效。

    <section name="appSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0,Culture=neutral,  PublicKeyToken=b03f5f7f11d50a3a"
    restartOnExternalChanges="false" requirePermission="false" />

    其中,restartOnExternalChanges设置为false,是告诉运行时,以后我修改WebConfig的appSettings不要重启程序了。
    jon.valett@gmail.com

    真是感谢您的热心回复。我也越来越觉得,“生效”是编译后的产品或成果。

    “”其中,restartOnExternalChanges设置为false,是告诉运行时,以后我修改WebConfig的appSettings不要重启程序了。
    那它修改后的内容还是“生效”了,真是让人费解

    2009年8月15日 4:24
  • 你好,配置设置在编译好后将被缓存起来,供以后的请求使用,appSettings会经常被使用和修改,所以修改appSettings后,只是更新了保存设置的那个对照表。程序动态的从表中读取数据。
    jon.valett@gmail.com
    2009年8月15日 4:27
    版主
  • 这个微软的一个性能优化策略,通常appSettings保存的是某些配置参数信息。它的改变不会影响整个程序的逻辑变化,所以不需要重新编译影响效能。
    jon.valett@gmail.com
    2009年8月15日 4:29
    版主
  • 我刚查到一个文章:其中“在运行时对Web.config”文件的修改不需要重启服务就可以生效(注:<processModel>节例外)
    2009年8月15日 4:40
  • 避免更改应用程序的 \bin 目录中的程序集       

    更改bin目录的dll都会导致应用重启。对于正在在线的繁忙的web站点来说,每个更新都导致web访问突然变得很慢。因为许多缓存

    要重新加载。同时若使用的是session,也会使所有session失效。因此将不需要一次更改的dll分开部署会更好。
    .NET可以通过应用程序配置文件指定运行时要匹配的路径,在web.config的configuration节添加如下配置即可:
    <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <probing privatePath="bin\subbin1;bin\subbin2"/>
    </assemblyBinding>
    </runtime>
    2009年8月15日 8:13
  • App_Code 文件夹,是 ASP.NET 使用的一个特殊目录,但它与 \bin 目录又有所不同:\bin 目录用于存储由应用程序使用的预编译程序集,而 \Code 目录用于存储要在运行时进行动态编译的类文件。这使您可以将业务逻辑组件、数据访问组件以及其他组件的类存储在应用程序中的某个位置,并从任意页面使用这些类。因为这些类是在运行时动态编译的,而且会被包含 \Code 目录的应用程序自动引用,所以在部署项目之前不需要生成项目,也不需要明确添加类引用。您可以放心地对组件进行更改,然后使用简单的 XCOPY 或拖放操作进行部署。除了简化组件的部署和引用外,\Code 目录还极大地简化了本地化过程中使用的资源文件 (.resx) 的创建和访问过程,以及为 WSDL 文件 (.wsdl) 自动生成和编译代理类的过程
    2009年8月15日 8:58
  • 你好,以上说的都没有错,不知你现在的问题是?
    jon.valett@gmail.com
    2009年8月15日 20:26
    版主
  • 我刚查到一个文章:其中“在运行时对Web.config”文件的修改不需要重启服务就可以生效(注:<processModel>节例外)
    。net帮你重启了,所以你自己无需重启

    【孟子E章】
    2009年8月16日 13:38
    版主
  • 您好,
    1、重启服务,指的是从“控制面板”--->"管理工具"--->“服务”--->“3w服务”
    2、重启应用程序是指asp.net会在修改web.config后重新编译webapplication或website。
    两者是两个概念。
    2009年8月16日 15:05
    版主
  • 谢谢您的解答,对我对问题的理解有很大的帮助。
    2009年8月16日 15:34
  • 我这个问题,是源于在看李建忠老师的《设计模式》视频教程,他在教程中提到在配置文件中写一些设定以达到解耦的目地,但我认为如果在Web.config文件中这么作,如果修改它时会引起程序重启,这样Session及缓存会失去{对于一个加载了许多缓存的程序,可是影响不小}:例
    1 < appSettings >
    2      < add  key ="factoryName"  value ="EventFactory" ></ add >
    3 </ appSettings >
    4

    此时客户端代码如下:

     

     1 /**/ ///   <summary>
     2 ///  App类
     3 ///   </summary>

     4 public   class  App
     5 {
     6      public   static   void  Main( string [] args)
     7      {
     8          string  strfactoryName  =  ConfigurationSettings.AppSettings[ " factoryName " ];
     9         
    10         LogFactory factory;
    11         factory  =  (LogFactory)Assembly.Load( " FactoryMethod " ).CreateInstance( " FactoryMethod. "   +  strfactoryName);
    12
    13         Log log  =  factory.Create();
    14         log.Write();
    15     }

    16 }


    像以上的情况,如果修改了Web.config中的文件,会导致程序重启,那么Session,缓存都会失去。
    所以我才有了以上的疑问
    2009年8月16日 15:40
  • 您好,李老师的示例主要是为了说明设计模式中的概念。
    真正在使用时,首先不会很频繁地修改,其次这个还涉及到实施发布策略。而且就程序修改发布来说是很小的代价了。

    另,如果想不重启程序也是有办法的,不把配置信息放到web.config中,可以放到数据库中,实现自己的发布策略代码,以实现动态改变的目的。

    2009年8月16日 15:47
    版主
  • 上面已经讲得很详细了,如果楼主还不明白,建议系统学习asp.net的基础知识。
    http://hi.baidu.com/2009ajun
    2009年8月16日 22:45
  • 谢谢您的热心回复,让我明白并学习到了许多,衷心谢谢您
    2009年8月17日 2:11
  • 哈,不客气,互相交流,共同进步。

    PS:下次记得标记您认为对的或有帮助的帖子为答案。:)
    2009年8月17日 3:48
    版主