C# - 使用 aspnet_regiis.exe 时找不到配置节
本文关键字:找不到 配置 exe regiis 使用 aspnet | 更新日期: 2023-09-27 17:56:56
我正在尝试为我正在开发的 C# 应用程序加密 app.config 文件中的敏感连接字符串信息。我正在使用以管理员身份运行的 VS 命令 promt 中的以下命令:
aspnet_regiis.exe -pef "Credentials" "C:'Users'.....'MyProjectFolderDir"
这是我的app.config文件的结构:
<?xml version="1.0" encoding="utf-8" ?>
<config>
<configSections>
<section name="ApplicationSettings" type="sometype"/>
<section name="WebSettings" type="sometype"/>
<section name="Credentials" type="sometype"/>
<section name="SQLServerSettings" type="sometype"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<ApplicationSettings Mode="mymode"
FileSearchMode="myfilemode"
SubtractHoursDebugging="0"/>
<WebSettings WebApiServers=""
CredentialMethod="mymethod"/>
<Credentials
Domain="mydomain"
UserName="myusername"
Password="mypassword"/>
<SQLServerSettings
ConnectionString="Server=***********"/>
</config>
但是,我不断收到以下错误:
正在加密配置部分... 找不到配置部分"凭据"。 失败!
我怎样才能让它加密我的部分?
您的配置文件应该以<configuration>
元素开头,而不是<config>
.因为它<config>
aspnet_regiis.exe
薄Credentials
嵌套元素,因此错误。对于您当前的配置文件,该命令应该是
aspnet_regiis.exe -pef "config'Credentials" "C:'Users'.....'MyProjectFolderDir"
首先,这里有一个答案,您可以从自定义配置部分了解如何在app.config中创建自定义配置部分? 这是MSDN https://msdn.microsoft.com/en-us/library/2tw134k3.aspx 的示例
其次,类型通常引用真实模型,因此您应该输入命名空间和您创建的类,以对要使用的配置类型进行建模,如下所示:
<configuration>
<configSections>
<section name="sampleSection"
type="System.Configuration.SingleTagSectionHandler" />
</configSections>
<sampleSection setting1="Value1" setting2="value two"
setting3="third value" />
</configuration>
希望对你有帮助
事实证明,aspnet-regiis.exe 专门用于 web.config 文件。它不适用于 app.config 文件,除非您重命名为 web.config。我没有在每次想要加密/解密时重命名我的 app.config,而是最终创建了一个类,每次运行应用程序时都会处理这个问题。确保使用以下方法:
using System.Configuration;
using System.Web.Security;
类:
internal class Crypto
{
internal static AppSettingsSection GetEncryptedAppSettingsSection(string exeConfigName)
{
// Open the configuration file and retrieve
// the connectionStrings section.
System.Configuration.Configuration config = ConfigurationManager.
OpenExeConfiguration(exeConfigName);
AppSettingsSection section =
config.GetSection("appSettings")
as AppSettingsSection;
EncryptConfigSection(config, section);
return section;
}
internal static ConnectionStringsSection GetEncryptedConnectionStringsSection(string exeConfigName)
{
// Open the configuration file and retrieve
// the connectionStrings section.
System.Configuration.Configuration config = ConfigurationManager.
OpenExeConfiguration(exeConfigName);
ConnectionStringsSection section =
config.GetSection("connectionStrings")
as ConnectionStringsSection;
EncryptConfigSection(config, section);
return section;
}
internal static void EncryptConfigSection(System.Configuration.Configuration config, ConfigurationSection section)
{
//Ensure config sections are always encrypted
if (!section.SectionInformation.IsProtected)
{
// Encrypt the section.
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
// Save the current configuration.
config.Save();
}
}
}