ASP.NETバージョンのmachine.configへのパスが必要だったので、すべての.NETフレームワークパスを気にしませんでした(たとえば、3および3.5フレームワークは2.0の拡張にすぎないため)。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET
レジストリキーとPath
フレームワークキーの値をクエリすることになりました。最後config\machine.config
にフレームワークパスに追加すると、望ましい結果が得られました。
ASP.NETランタイムをmachine.configパスにマップする方法では、「v2.0」、「2.0.50727.0」、または「v2」と「2」のいずれかの形式の文字列を使用し、「2.0」のように10進数の1桁に正規表現します。 「または「2」のように10進数が指定されていない場合は、最初の1桁で、レジストリから正しい値を取得します。これに似たもの:
string runtimeVersion = "2.0";
string frameworkPath;
RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\ASP.NET");
foreach (string childKeyName in regKey.GetSubKeyNames())
{
if (Regex.IsMatch(childKeyName, runtimeVersion))
{
RegistryKey subKey = regKey.OpenSubKey(childKeyName))
{
frameworkPath = (string)subKey.GetValue("Path");
}
}
}
string machineConfigPath = Path.Combine(frameworkPath, @"config\machine.config");
string webRootConfigPath = Path.Combine(frameworkPath, @"config\web.config");
最後に、この構成をWebConfigurationMapに渡します(Microsoft.Web.Administrationを使用していますが、System.Configurationでも使用できます。コードはほとんど同じです)。
using (ServerManager manager = new ServerManager())
{
Configuration rootWebConfig = manager.GetWebConfiguration(new WebConfigurationMap(machineConfigPath, webRootConfigPath), null);
}
WebConfigurationMapは、構成をカスタムmachine.configおよびroot web.configにマップします(したがって、GetWebConfiguration()の2番目の引数としてnull)