0

<appSettings>在我的 app.config 文件中指定,我正在添加

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings configSource="ShareAppSettings.debug.config"/>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.1"/>
    </startup>
</configuration>

ShareAppSettigns.debug.config 是我在本地计算机上使用的外部配置文件,我不想与团队的其他成员共享它。

ShareAppSettings.debug.config 看起来像:

<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
  <add key="clientID" value="11" />
  <add key="clientSecret" value="11" />
  <add key="tenantID" value="11" />
</appSettings>

每当我尝试调试主要代码时:

private static List<string> AppCredentials()
{
   string clientID = ConfigurationManager.AppSettings["clientID"];
   string clientSecret = ConfigurationManager.AppSettings["clientSecret"];
   string tenantID = ConfigurationManager.AppSettings["tenantID"];

   List<string> appCred = new List<string> { clientID, clientSecret, tenantID };

   if (clientID == null)
       throw new Exception("ShareAppSettings.Debug.Config file was not provided in this repo.");

   return (appCred);
}

出于某种原因,我没有得到 clientId、slientSecret 或tenantId 的值。此代码是 Grasshopper Add-on for v6 模板的一部分,它在 .NET Framework 4.7.1 上运行。每当我将相同的代码复制到相同框架的新 C# 控制台中时,都会构建代码。如果您能给我有关如何解决此问题的建议,我将不胜感激。

“EnableWindowsFormsHighDpiAutoResizing”是什么意思以及如何使它工作?

非常感谢

在此处输入图像描述

4

1 回答 1

0

我建议在节中使用file属性(对应于AppSettingsSection.File属性)而不是configSource属性(对应于SectionInformation.ConfigSource属性)appSettings

  • configSource不支持该部分中的其他键,而appSettings可能包含应用程序所需的其他键,并且可能在其他地方(其他人可能会添加/删除它们 - 出于测试目的或任何其他原因)。

file属性允许该部分中存在其他键appSettings

您的app.config文件可以是:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <appSettings file="ShareAppSettings.debug.config">
        <add key="DpiAwareness" value="PerMonitorV2"/>
    </appSettings>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.1"/>
    </startup>
</configuration>

现在可以通过打开命名配置部分来访问这些值:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
AppSettingsSection appSettings = (AppSettingsSection)config.GetSection("appSettings");

var kvpClientID = appSettings.Settings["clientID"];
var kvpClientSecret = appSettings.Settings["clientSecret"];
var kvpCenantID = appSettings.Settings["tenantID"];

string clientID = kvpClientID.Value;

直接使用ConfigurationManager.AppSettings - NameValueCollection - 返回指定键的值:

string clientID = ConfigurationManager.AppSettings["clientID"];
string clientSecret = ConfigurationManager.AppSettings["clientSecret"];
string tenantID = ConfigurationManager.AppSettings["tenantID"];

请注意,使用该file属性,您ShareAppSettings.debug.config不需要(但不禁止)XML 标头,它可以只是:

<appSettings>
  <add key="clientID" value="11" />
  <add key="clientSecret" value="11" />
  <add key="tenantID" value="11" />
</appSettings>

次要注意:
您可以将file属性设置为在运行时指向另一个文件并刷新appSettings值以更新配置。
请注意,如果file已设置属性,则该.config文件中包含的所有值都不会被解除,而是移动到[Application].exe.config文件中,成为该部分的<appSettings>一部分(因此,它们被保留)。
使用该属性的另一个原因file可能更可取。

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var appSettings = config.AppSettings;
appSettings.File = "SomeOtherFile.config";
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
于 2020-04-28T14:24:47.283 回答