"externalizing" 某些配置设置进入外部文件时的行为不同
Behavior different when "externalizing" certain config settings into external files
我有一个遗留的 ASP.NET 4.0 Webforms 应用程序,它已经投入生产一段时间了。我现在以 WebAPI REST 服务的形式向其添加附加功能。
添加 WebAPI NuGet 包还在我的 web.config
配置 NewtonSoft.Json 包运行时版本中添加了一个条目:
现在,因为我有我的配置 "compartementalized",我想把它放到一个单独的 runtime.config
文件中并从主 web.config
中引用它:
<runtime configSource="runtime.config" />
当我这样做时,突然我在 global.asax.cs
中注册了 WebAPI 路由
protected void Application_Start(object sender, EventArgs e)
{
...
// Route #1
GlobalConfiguration.Configuration.Routes.MapHttpRoute("Route1", "test/{list}/{check}", new { Controller = "Devices" });
...
}
失败,异常:
System.IO.FileLoadException was unhandled by user code
Message=the file or assembly "Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" or a dependency could not be found.
Source=System.Net.Http.Formatting
FileName=Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
对我来说,外化的 runtime.config
似乎没有与 web.config
本身的内容同时被读取......这让我感到很惊讶,我原以为整个 web.config
包括任何 "externalized" 子配置文件将被读取 在 任何 global.asax.cs
中的代码被执行之前。 ..
有什么见解吗?我什至不知道去哪里搜索MSDN上这种级别的详细信息....
web.config 包含 Windows 网络堆栈的许多不同部分的配置信息。
它有些告诉 IIS 做什么,有些告诉 .NET 做什么,有些告诉应用程序做什么。因此,不同的元素的行为非常不同,具体取决于它们针对的是堆栈的哪一部分。
<runtime>
级别很低,参见 this from MSDN:
"Runtime settings specify how the common language runtime handles
garbage collection and the version of an assembly to use in
configuration files."
configSource="whatever"
其实是.NET自己解析的,see this from MSDN:
In ASP.NET applications, at run time you can assign to the
ConfigSource property the name of an alternative configuration file.
所以基本上 .NET 是 运行,在解析 configSource
.
之前具有指定的 <runtime>
设置
如果您在 Visual Studio 中使用 web.config 文件,您会看到智能感知会告诉您哪些属性可以放在哪里。
我有一个遗留的 ASP.NET 4.0 Webforms 应用程序,它已经投入生产一段时间了。我现在以 WebAPI REST 服务的形式向其添加附加功能。
添加 WebAPI NuGet 包还在我的 web.config
配置 NewtonSoft.Json 包运行时版本中添加了一个条目:
现在,因为我有我的配置 "compartementalized",我想把它放到一个单独的 runtime.config
文件中并从主 web.config
中引用它:
<runtime configSource="runtime.config" />
当我这样做时,突然我在 global.asax.cs
protected void Application_Start(object sender, EventArgs e)
{
...
// Route #1
GlobalConfiguration.Configuration.Routes.MapHttpRoute("Route1", "test/{list}/{check}", new { Controller = "Devices" });
...
}
失败,异常:
System.IO.FileLoadException was unhandled by user code
Message=the file or assembly "Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" or a dependency could not be found. Source=System.Net.Http.Formatting
FileName=Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
对我来说,外化的 runtime.config
似乎没有与 web.config
本身的内容同时被读取......这让我感到很惊讶,我原以为整个 web.config
包括任何 "externalized" 子配置文件将被读取 在 任何 global.asax.cs
中的代码被执行之前。 ..
有什么见解吗?我什至不知道去哪里搜索MSDN上这种级别的详细信息....
web.config 包含 Windows 网络堆栈的许多不同部分的配置信息。
它有些告诉 IIS 做什么,有些告诉 .NET 做什么,有些告诉应用程序做什么。因此,不同的元素的行为非常不同,具体取决于它们针对的是堆栈的哪一部分。
<runtime>
级别很低,参见 this from MSDN:
"Runtime settings specify how the common language runtime handles garbage collection and the version of an assembly to use in configuration files."
configSource="whatever"
其实是.NET自己解析的,see this from MSDN:
In ASP.NET applications, at run time you can assign to the ConfigSource property the name of an alternative configuration file.
所以基本上 .NET 是 运行,在解析 configSource
.
<runtime>
设置
如果您在 Visual Studio 中使用 web.config 文件,您会看到智能感知会告诉您哪些属性可以放在哪里。