【问题标题】:How to get value from applicationSettings?如何从 applicationSettings 中获取价值?
【发布时间】:2025-12-28 13:35:12
【问题描述】:

我正在尝试从 app.config 获取我的应用程序中的服务价值。我必须将它发送到显示 URL 的应用程序。我在此应用程序中使用的 Web 服务也在使用它,因此无法将其移动到 appSettings。

我想通过c#代码得到这个值'http://192.168.4.22:82/Service.asmx'。

<applicationSettings>
    <SDHSServer.Properties.Settings>
      <setting name="DOServer_WebReference1_Service" serializeAs="String">
        <value>http://192.168.4.22:82/Service.asmx</value>
      </setting>
    </SDHSServer.Properties.Settings>
  </applicationSettings>

【问题讨论】:

标签: c# .net app-config windows-applications web-reference


【解决方案1】:

我不确定我是否明白这个问题,

string s = SDHSServer.Properties.Settings.DOServer_WebReference1_Service;

会给你的

【讨论】:

    【解决方案2】:

    如果我理解正确,您有两个 Visual Studio C# 项目。第一个(项目 A)具有您要在第二个(项目 B)中访问的设置。为此,您必须执行以下步骤:

    • 添加从项目 B 到项目 A 的引用

    • 将我项目 A 的设置的访问修饰符更改为公共(默认为内部)

    • 现在您可以访问项目 B 中的设置,在您的情况下使用完全限定名称 SDHSServer.Properties.Settings.Default.DOServer_WebReference1_Service

    请注意,在设置编辑器中,您可以为设置设置一个值。这是设置的默认值,该值也存储在项目的App.config 文件中。但是,您可以通过在 App.config 文件中为正在执行的应用程序提供另一个值来覆盖此值。

    在此示例中,项目 A 的 App.config 文件将包含设置值 http://192.168.4.22:82/Service.asmx。但是,您可以在项目 B 的 App.config 文件中覆盖它以获取另一个值。这可能不是您想要做的,但您应该意识到这一点。

    【讨论】:

    • 点赞您需要将设置的访问修饰符设置为 public 才能访问它。
    【解决方案3】:

    我在 ASP.Net 4.0 站点中使用此代码从“应用程序设置”部分中提取部分数据:

    public sealed class SiteSupport {
    
    
        /// <summary>
        /// Retrieve specific section value from the web.config
        /// </summary>
        /// <param name="configSection">Main Web.config section</param>
        /// <param name="subSection">Child Section{One layer down}</param>
        /// <param name="innersection">Keyed on Section Name</param>
        /// <param name="propertyName">Element property name</param>
        /// <returns></returns>
        /// <example>string setting = NoordWorld.Common.Utilities.SiteSupport.RetrieveApplicationSetting("applicationSettings", "NoordWorld.ServiceSite.Properties.Settings", "ServiceWS_SrvWebReference_Service", "value")</example>
        public static string RetrieveApplicationSetting(string configSection, string subSection, string innersection, string propertyName) {
            string result = string.Empty;
            HttpWorkerRequest fakeWorkerRequest = null;
            try {
                using (TextWriter textWriter = new StringWriter()) {
                    fakeWorkerRequest = new SimpleWorkerRequest("default.aspx", "", textWriter);
                    var fakeHTTPContext = new HttpContext(fakeWorkerRequest);
                    Configuration config = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap() { ExeConfigFilename = fakeHTTPContext.Server.MapPath(@"~/Web.config") }, ConfigurationUserLevel.None);
                    ConfigurationSectionGroup group = config.SectionGroups[configSection];
                    if (group != null) {
                        ClientSettingsSection clientSection = group.Sections[subSection] as ClientSettingsSection;
                        if (clientSection != null) {
                            SettingElement settingElement = clientSection.Settings.Get(innersection);
                            if (settingElement != null) {
                                result = (((SettingValueElement)(settingElement.ElementInformation.Properties[propertyName].Value)).ValueXml).InnerText;
                            }
                        }
                    }
                }
            } catch (Exception ex) {
                throw ex;
            } finally {
                fakeWorkerRequest.CloseConnection();
            }
            return result;
        }
    }
    

    https://www.ServiceWS.com/webservices/Golf

    【讨论】:

      【解决方案4】:

      取决于这样的事情。

        var s = SDHSServer.Properties.Settings.Default.DOServer_WebReference1_Service;
      

        var s = SDHSServer.Properties.Settings.DOServer_WebReference1_Service;
      

      【讨论】: