none
封装类库,如何实现引用时自动向Web.config中添加节点 RRS feed

  • 问题

  • 我想封装一个类库,但是类库中需要用到web.config的一些内容,而向web.config中添加节点的这步操作,我不想将来让使用者自己添加,想实现排除人工干预;

    以前使用其他的第三方类库时,会发现它们自动向web.config中添加了一些节点信息,我想请问这是怎么实现的,在引用后就自动添加上了。

    我是自己理解的是在引用时添加的,如果不是,麻烦指导下该怎么做,先谢谢了

    2013年4月23日 8:16

答案

  • 是阿,我了解你的目的,不過我沒寫過元件,不曉得怎麼達成它。

    只不過是提出個不同想法,您參考看看。

    關於重複寫入的問題,您可以在專案裡添加個Global.asax,

    然後在Application_Start事件裡這樣寫試試:

        void Application_Start(object sender, EventArgs e)
        {
            Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(HttpRuntime.AppDomainAppVirtualPath);
            AppSettingsSection app = config.AppSettings;
            if (!app.Settings.AllKeys.Contains("B"))
            {
                app.Settings.Add("B", "This is B value");
                config.Save(ConfigurationSaveMode.Modified);
            }
        }

    如此只有在站點啟動之後才會進來這麼一次,

    寫入之後也不會再重複寫入了。



    Best regards


    2013年4月24日 3:12
  •   要是能限制只写一次,那也可以解决问题,先谢谢了,一会儿试试。另外,这个只有在启动时才会写入吗? 节点中的内容我想添加比如连接字符串这类的内容,不同环境下可能要使用者手动修改,如果在启动后写,恐怕有点晚了。我现在是有这方面的考虑。

    是的,因為Application_Start只有在站點啟動之後發生,只會發生一次,

    並且會比任何頁面的任何事件還早發動的。

    您跑下步進調試就知道~



    Best regards

    • 已标记为答案 Cloud_915 2014年10月31日 14:47
    2013年4月24日 9:41

全部回复

  • 我不曉得引用時如何添加,

    不過找到了in Code的做法,

    你可以在使用到類庫的Code裡先做這件事,

    或是在站點進入頁面做,

    參考看看:

    [ASP.NET][C#]app.config與web.config的增加、修改、刪除操作



    Best regards

    2013年4月23日 9:39
  • 我不曉得引用時如何添加,

    不過找到了in Code的做法,

    你可以在使用到類庫的Code裡先做這件事,

    或是在站點進入頁面做,



    Best regards

    使用Configuration对象来操作web.config 的方法需要在程序中手动调用之后,才能写入到web.config,无法控制写入的时机和次数,多次调用可能会写入重复的节点吧? 我想实现的目的是,类库自动向引用网站的web.config中写入一次。(Configuration和操作XML的方式好像都需要调用方法去执行,这样可能都会重复的写入
    2013年4月24日 2:25
  • 是阿,我了解你的目的,不過我沒寫過元件,不曉得怎麼達成它。

    只不過是提出個不同想法,您參考看看。

    關於重複寫入的問題,您可以在專案裡添加個Global.asax,

    然後在Application_Start事件裡這樣寫試試:

        void Application_Start(object sender, EventArgs e)
        {
            Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(HttpRuntime.AppDomainAppVirtualPath);
            AppSettingsSection app = config.AppSettings;
            if (!app.Settings.AllKeys.Contains("B"))
            {
                app.Settings.Add("B", "This is B value");
                config.Save(ConfigurationSaveMode.Modified);
            }
        }

    如此只有在站點啟動之後才會進來這麼一次,

    寫入之後也不會再重複寫入了。



    Best regards


    2013年4月24日 3:12
  • 是阿,我了解你的目的,不過我沒寫過元件,不曉得怎麼達成它。

    只不過是提出個不同想法,您參考看看。

    關於重複寫入的問題,您可以在專案裡添加個Global.asax,

    然後在Application_Start事件裡這樣寫試試:

        void Application_Start(object sender, EventArgs e)
        {
            Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(HttpRuntime.AppDomainAppVirtualPath);
            AppSettingsSection app = config.AppSettings;
            if (!app.Settings.AllKeys.Contains("B"))
            {
                app.Settings.Add("B", "This is B value");
                config.Save(ConfigurationSaveMode.Modified);
            }
        }

    如此只有在站點啟動之後才會進來這麼一次,

    寫入之後也不會再重複寫入了。



    Best regards


      要是能限制只写一次,那也可以解决问题,先谢谢了,一会儿试试。另外,这个只有在启动时才会写入吗? 节点中的内容我想添加比如连接字符串这类的内容,不同环境下可能要使用者手动修改,如果在启动后写,恐怕有点晚了。我现在是有这方面的考虑。
    2013年4月24日 7:52
  •   要是能限制只写一次,那也可以解决问题,先谢谢了,一会儿试试。另外,这个只有在启动时才会写入吗? 节点中的内容我想添加比如连接字符串这类的内容,不同环境下可能要使用者手动修改,如果在启动后写,恐怕有点晚了。我现在是有这方面的考虑。

    是的,因為Application_Start只有在站點啟動之後發生,只會發生一次,

    並且會比任何頁面的任何事件還早發動的。

    您跑下步進調試就知道~



    Best regards

    • 已标记为答案 Cloud_915 2014年10月31日 14:47
    2013年4月24日 9:41