Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从外部文件读取XML appSettings?_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# 如何从外部文件读取XML appSettings?

C# 如何从外部文件读取XML appSettings?,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,有很多类似的问题,我已经看了每一个我能找到的,但没有用 我将Google+身份验证的API密钥存储在解决方案外部的.config文件中(与解决方案文件夹处于同一级别) 我正在尝试读取Startup.Auth.cs中的值,如下所示: public void ConfigureAuth(IAppBuilder app) { app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions() { Cli

有很多类似的问题,我已经看了每一个我能找到的,但没有用

我将Google+身份验证的API密钥存储在解决方案外部的.config文件中(与解决方案文件夹处于同一级别)

我正在尝试读取Startup.Auth.cs中的值,如下所示:

public void ConfigureAuth(IAppBuilder app)
{
    app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
    {
        ClientId = WebConfigurationManager.AppSettings.Get("GoogleClientId"),
        ClientSecret = WebConfigurationManager.AppSettings.Get("GoogleClientSecret")
    });
}
根Web.config:

<appSettings file="..\Secrets.config"> <!-- Path is correct, relative to Web.config -->
  <add key="webpages:Version" value="3.0.0.0" />
  <add key="webpages:Enabled" value="false" />
  <add key="ClientValidationEnabled" value="true" />
  <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>

Secrets.config:

<configuration>
  <appSettings>
    <add key="GoogleClientId" value="shh" />
    <add key="GoogleClientSecret" value="shh" />
  </appSettings>
</configuration>

在我的解决方案之外的.config文件中(与解决方案文件夹处于同一级别)

IIS应用程序完全不知道其虚拟应用程序文件夹之外的任何文件夹。在web应用程序的上下文中没有“与解决方案文件处于同一级别”,因为解决方案文件没有与之一起部署

如果要将appSettings置于应用程序文件夹之外,则您唯一的内置选项是根
web.config
文件或
machine.config
文件,这两个文件都是计算机的全局文件(但特定于您运行的.NET framework版本)。看

但是为了记录在案,如果您将应用程序设置保存在应用程序的web.config文件中,那么从长远来看最容易管理。最终,您将需要更改/添加一个新的web服务器,并且您可能会有一段时间绞尽脑汁,试图弄清楚,如果需要将这些设置放置在虚拟应用程序文件夹之外,那么在该时间到来时,为什么这些设置不再起作用

Secrets.config

Secrets.config:

<configuration>
  <appSettings>
    <add key="GoogleClientId" value="shh" />
    <add key="GoogleClientSecret" value="shh" />
  </appSettings>
</configuration>

官方MS文档


您是否尝试验证secrets.config是否在生成后复制


通过右键单击文件并查看属性,验证文件的生成操作是否设置为始终复制。

我遵循guide.Yup的建议,在同一级别上也可以使用它。我不想在我的存储库中公开敏感信息,这就是为什么我试图按照Rick Anderson的建议做,并将其完全置于解决方案之外。这样做不行。只是为了解决问题。当他们处于同一水平时,它是否起作用。我只是想排除它能起作用的可能性。我在生产中也有相同的文件,但在我的例子中,这些文件都在同一根上。是的,如果它们在同一级别上,它就可以工作。奇怪的是,教程可能会出错。请记住,如果找不到文件,它就不起作用。尝试小步骤。转到一个文件夹,然后再试一次,依此类推。正在确认文件路径。嗯,是的,只有一个步骤可以完成,这就是最初的步骤。