2013-04-22 5 views
0

일부 사용자 범위 설정을 저장하기 위해 사용자 지정 설정 클래스를 만들려고합니다. 몇 달 전에이 작업을 수행했지만 정상적으로 작동했지만 모든 세부 정보를 기억할 수없고 더 이상 소스 코드에 액세스 할 수 없습니다.사용자 지정 부분 설정 파일을 만들려고합니다.

[Serializable] 
public class Product 
{ 
    [XmlAttribute("Name")] 
    public string Name { get; set; } 

    [XmlAttribute("Id")] 
    public int Id { get; set; } 
} 

가 여기에 의 App.config 파일, 그리고 샘플 Product을 포함

internal sealed partial class CustomSettings : global::System.Configuration.ApplicationSettingsBase 
{ 
    private static CustomSettings defaultInstance = ((CustomSettings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new CustomSettings()))); 

    public static CustomSettings Default 
    { 
     get 
     { 
      return defaultInstance; 
     } 
    } 

    [global::System.Configuration.UserScopedSettingAttribute()] 
    public global::System.Collections.Generic.List<global::LearningProject.Types.Product> Products 
    { 
     get 
     { 
      return ((global::System.Collections.Generic.List<global::LearningProject.Types.Product>)(this["Products"])); 
     } 
     set 
     { 
      this["Products"] = value; 
     } 
    } 
} 

Product.cs을

CustomSettings.cs : 여기에 지금까지 가지고 무엇을 :

<configuration> 
<configSections> 
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
     <section name="LearningProject.Settings1" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> 
     <section name="LearningProject.CustomSettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> 
    </sectionGroup> 
</configSections> 
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup> 
    <userSettings> 
     <LearningProject.CustomSettings> 
      <setting name="Products" serializeAs="Xml"> 
      <ArrayOfProduct> 
       <Product> 
       <Name>Product1</Name> 
       <Id>ProductID</Id> 
       </Product> 
      </ArrayOfProduct> 
      </setting> 
     </LearningProject.CustomSettings> 
    </userSettings> 
</configuration> 
,

지금 나는 Products의 목록을하려고 할 때 null 수 :

중 내가 뭔가를 잘못하고 있어요 의미 (XML 어쩌면, 속성?) 아니면 제가 단계를 누락
List<Product> products = CustomSettings.Default.Products; 

. 또한 Settings1.settings (VS에 의해 생성됨)이 이미 존재하며, 내 CustomSettings 클래스는 기본 자동 생성 설정 파일에 메소드를 추가하는 것입니다. 나는 누군가가 이것을 한 적이 있는지 궁금했다. 어떤 도움을 주셔서 감사합니다.

답변

0

의 app.config에서

<setting name="Products" serializeAs="Xml"> 
    <ArrayOfProduct> 
    <Product> 
     <Name>Product1</Name> 
     <Id>ProductID</Id> 
    </Product> 
    </ArrayOfProduct> 
</setting> 

나는이

CustomSettings.Default.Products = new List<Product>(); 
CustomSettings.Default.Products.Add(new Product() { Id = 1, Name = "Product1" }); 
CustomSettings.Default.Save(); 

이제 지역 설정을 실현하는 방법

<setting name="Products" serializeAs="Xml"> 
    <value> 
    <ArrayOfProduct> 
     <Product Name="Product1" Id="1" /> 
    </ArrayOfProduct> 
    </value> 
</setting> 

(

%의 appdatalocal % \ 프로젝트 이름 .. \ user.config 교체)에는 올바른 값이 포함되어 있습니다.

+0

null을 내가 수동으로'app.config'에 추가 할 때 null이되지만, 코드를 통해 추가하는 것은 효과가있는 것처럼 보입니다.하지만 여전히'app.config'에서 볼 수는 없습니다. . 어떤 생각? – PoweredByOrange

+0

내 대답을 수정했습니다 : % appdatalocal % \ project_name .. \ user.config에있는 tag.Local config을 잊어 버렸습니다. 완료되면 삭제하십시오. 그렇지 않으면 설정이 적용됩니다. – cdmnk

+0

그러나 app.config에서 설정을 직접 입력하려면 어떻게해야합니까? 이 달 전에 처음 만들었을 때 모든 설정은 app.config에 기록되거나 읽혀졌습니다. – PoweredByOrange

관련 문제