gpt4 book ai didi

c# - 从 .NET 程序集加载项目设置

转载 作者:行者123 更新时间:2023-12-03 20:20:33 26 4
gpt4 key购买 nike

我在 .NET C# 2008 Win Forms 解决方案中有多个项目。其中一些项目具有在其中定义的设置(通过项​​目属性、设置 UI 部分 - 而不是配置文件)。我正在尝试构建应用程序的调试部分(对用户隐藏),然后显示这些设置当前的设置。我有以下代码来获取所有程序集:

AssemblyName[] assemComponents = Assembly.GetExecutingAssembly().GetReferencedAssemblies();

foreach (AssemblyName assemName in assemComponents)
{
ListViewItem item = listComponents.Items.Add(assemName.Name);
item.SubItems.Add(assemName.Version.ToString());
}

目前,这段代码只是将程序集名称及其版本列表放入控件中。但是,我想知道是否使用这些 Assembly 对象(或与此相关的任何其他对象)我可以检索已设置的项目设置。

感谢大家的帮助,如果我可以提供更多详细信息,请告诉我。

最佳答案

当您将项目添加到设置设计器时,Visual Studio 会生成一个类,用于将这些设置读/写到文件中;它还包括一个静态 Default 属性,用于访问保存默认值的此类的实例。 (请参阅项目中的 Settings.Designer.cs)。

您可以找到这些类并通过反射检查它们:

foreach ( AssemblyName assemName in assemComponents )
{
foreach ( var type in Assembly.Load( assem ).GetTypes() )
{
// look for classes that derive from SettingsBase named "Settings"
if ( type.Name == "Settings" && typeof( SettingsBase ).IsAssignableFrom( type ) )
{
// get the value of the static Default property
var defaults = (SettingsBase)type.GetProperty( "Default" ).GetValue( null, null );

// walk the property list and get the value from the Default instance
foreach ( SettingsProperty prop in defaults.Properties )
{
Debug.WriteLine( string.Format( "{0}: {1}", prop.Name, defaults[ prop.Name ] ) );
}
}
}
}

关于c# - 从 .NET 程序集加载项目设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6961929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com