1

나는 곧 내 머리카락을 모두 잡아 당긴다. 말할 것도없이, 나는 좌절감을 느낀다. .NET 용 Delphi Prism 내에서 코딩 중이며 현재 응용 프로그램 구성 파일에 내 응용 프로그램의 사용자 정의 속성을 저장하려고합니다. 다음과 같이 모든 것을 설정했습니다. 작동하지만 일부 값은 저장되거나 검색되지 않습니다. 그래서 app.config 파일을 살펴 보았습니다. app.config 파일은 모두 거기에있을 것이라고 생각했지만 파일에 저장된 값 중 검색된 값과 일치하지는 않습니다. Properties.Designer에 넣은 기본값 만 있습니다. 누군가는 Delphi Prism IDE 외부에서 응용 프로그램을 실행할 때만 설정 파일이 업데이트된다는 것을 온라인에서 말했습니다. 그리고 그랬지, 그건 여전히 효과가 없었어. 필자는 컴퓨터를 재부팅하여 델파이 프리즘이 지저분한 것으로 생각하고 빠른 휴식이 필요하다고 생각하기까지했습니다. 심지어 그것이 작동하지 않았다.응용 프로그램 속성 설정이 실제로 저장되거나 기록되는 위치는 어디입니까?

그래서 app.config 파일이나 메모리에 값이 저장되는 위치는 어디입니까?

는 (. 내 코드는 고르지 수 있습니다 나는 코드를 연마하기 전에 내 응용 프로그램이 작동을위한 기본 설정을 얻기 위해 노력하고 있어요.) 여기

내 Properties.Settings.Designer의 이미지 :

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
      <section name="MillenniaMono.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> 
     </sectionGroup> 
    </configSections> 
    <userSettings> 
     <MillenniaMono.Properties.Settings> 
      <setting name="baseDir" serializeAs="String"> 
       <value>00:00:00</value> 
      </setting> 
      <setting name="SoftKey" serializeAs="String"> 
       <value>$6e1eaffa</value> 
      </setting> 
      <setting name="OnTop" serializeAs="String"> 
       <value>False</value> 
      </setting> 
      <setting name="StartExpanded" serializeAs="String"> 
       <value>True</value> 
      </setting> 
      <setting name="HideOnStart" serializeAs="String"> 
       <value>False</value> 
      </setting> 
      <setting name="DXCommLocation" serializeAs="String"> 
       <value>50, 50</value> 
      </setting> 
      <setting name="InputBoxLocation" serializeAs="String"> 
       <value>50, 50</value> 
      </setting> 
      <setting name="MainFormLocation" serializeAs="String"> 
       <value>50, 50</value> 
      </setting> 
      <setting name="OutputUnitLocation" serializeAs="String"> 
       <value>50, 50</value> 
      </setting> 
      <setting name="SysErrorDlgLocation" serializeAs="String"> 
       <value>50, 50</value> 
      </setting> 
      <setting name="UnitDuplicateLocation" serializeAs="String"> 
       <value>50, 50</value> 
      </setting> 
      <setting name="UnitsLocation" serializeAs="String"> 
       <value>50, 50</value> 
      </setting> 
      <setting name="UnitSelectLocation" serializeAs="String"> 
       <value>50, 50</value> 
      </setting> 
      <setting name="CommStatusLocation" serializeAs="String"> 
       <value>50, 50</value> 
      </setting> 
      <setting name="UnitsWinSize" serializeAs="String"> 
       <value>703, 300</value> 
      </setting> 
      <setting name="DXComm_TypeDX" serializeAs="String"> 
       <value>0</value> 
      </setting> 
      <setting name="DXComm_Comport" serializeAs="String"> 
       <value>0</value> 
      </setting> 
      <setting name="DXComm_Baud" serializeAs="String"> 
       <value>1200</value> 
      </setting> 
      <setting name="DXComm_Parity" serializeAs="String"> 
       <value>0</value> 
      </setting> 
      <setting name="DXComm_RetryInt" serializeAs="String"> 
       <value>0</value> 
      </setting> 
      <setting name="DXComm_TimeOutDelay" serializeAs="String"> 
       <value>0</value> 
      </setting> 
      <setting name="DXComm_ScanTime" serializeAs="String"> 
       <value>0</value> 
      </setting> 
      <setting name="DXComm_Offline_Pct" serializeAs="String"> 
       <value>0</value> 
      </setting> 
      <setting name="DXComm_Online_Pct" serializeAs="String"> 
       <value>0</value> 
      </setting> 
      <setting name="DXComm_ControlCycleCount" serializeAs="String"> 
       <value>0</value> 
      </setting> 
      <setting name="DXComm_LockTimeDelay" serializeAs="String"> 
       <value>0</value> 
      </setting> 
     </MillenniaMono.Properties.Settings> 
    </userSettings> 
</configuration> 
,369 : 여기

Properties.Settings.Designer

은 app.config 파일입니다 1,363,210

의 app.config 여기에 기록하기위한 코드이다 : 여기

TypeDXCard.SelectedIndex:= commsetting.DXComm_TypeDX; 
Commport.SelectedIndex:=CommSetting.DXComm_Comport; 

case commsetting.DXComm_Baud of 
1200: BaudRate.SelectedIndex:=0; 
2400: BaudRate.SelectedIndex:=1; 
4800: Baudrate.SelectedIndex:=2; 
9600: BaudRate.SelectedIndex:=3; 
19200: BaudRate.SelectedIndex:=4; 
38400: BaudRate.SelectedIndex:=5; 
57600: BaudRate.SelectedIndex:=6; 
115200: BaudRate.SelectedIndex:=7; 
else BaudRate.SelectedIndex:=0; 
end; 

case commsetting.DXComm_Parity of 
0: begin EvenParity.Checked:=true; NoneParity.Checked:=false; end; 
1: begin NoneParity.Checked:=true; EvenParity.Checked:=false; end; 
else begin EvenParity.Checked:=true; NoneParity.Checked:=false; end; 
end; 

RetrySpin.Value:=Commsetting.DXComm_RetryInt; 
RetryIni := RetrySpin.Value; 

TimeOutSpin.Value:=CommSetting.DXComm_TimeOutDelay; 
TimeOutDelay := TimeOutSpin.Value; 

ScanSpin.Value:=CommSetting.DXComm_ScanTime; 
ScanTime := ScanSpin.Value; 

OfflineSpin.Value:=CommSetting.DXComm_Offline_Pct; 
OfflinePct:=OfflineSpin.Value; 

OnlineSpin.Value:=Commsetting.DXComm_Online_Pct; 
OnlinePct:=OnlineSpin.Value; 

Controlspin.Value:=Commsetting.DXComm_ControlCycleCount; 
ControlCycleCount:=Controlspin.Value; 

LockTime.Value:=Commsetting.DXComm_LockTimeDelay; 
LockTimeDelay := LockTime.Value; 
    end; 

표시 또는 검색되는 실제 값이다

여기
if ReadWrite then 
    begin 
     RetryIni := Int32(RetrySpin.value); 
     OfflinePct := int32(OfflineSpin.value); 
     ScanTime := int32(ScanSpin.value); 
     OnlinePct := int32(OnlineSpin.value); 
     timeoutDelay := int32(TimeoutSpin.Value); 
     ControlCycleCount := int32(ControlSpin.value); 
     LockTimeDelay := Int32(LockTime.value); 

     with commsetting := Millenniamono.Properties.Settings.Default do 
     begin 
     commsetting.DXComm_TypeDX := TypeDXCard.SelectedIndex; 
     commsetting.DXComm_Comport := Commport.SelectedIndex; 
     commsetting.DXComm_Baud:=BaudRate.SelectedIndex; 
     commsetting.DXComm_Parity := int32(EvenParity.Checked = true); 
     commsetting.DXComm_RetryInt:=RetryIni; 
     commsetting.DXComm_TimeOutDelay:=timeOutDelay; 
     commsetting.DXComm_ScanTime:=ScanTime; 
     commsetting.DXComm_Offline_Pct:=OfflinePct; 
     commsetting.DXComm_Online_Pct:=onlinepct; 
     commsetting.DXComm_ControlCycleCount:=ControlCycleCount; 
     commsetting.DXComm_LockTimeDelay:=LockTimeDelay; 
     commsetting.Save; 
     end; 
    end; 

코드 판독된다. 임의로 값을 저장하고 다시 읽도록 임의로 설정했지만 app.config 파일에서 보는 값과 일치하지 않습니다.

Window

답변

4

사용자 설정은 사용자 단위로 변경하거나 저장할 수있는 설정을 의미합니다. 따라서 이 아닌이 app.config에 저장되지만 user.config라는 새 파일에 저장되고 해당 파일은 de % APPDATA % 디렉토리에 저장됩니다. 윈도우 7 머신에서는

c : \ users \ myusername \ appdata \ local \ microsoft \ myassemblyname \ user와 비슷하게 보입니다.설정

사용자 설정은 또한의 app.config에서 찾을 수 있지만, 그 값이 기본값으로 사용됩니다 (일부는 어딘가에 GUID를 수 있습니다 나는 회수 할 수 없습니다) 때 새 user.config 파일 처음으로 생성됩니다.

EDIT : 파일 찾기에 대한 추가 정보. 나는 DEA.exe라는 어셈블리 디버거를 대에서 실행 빠른 테스트를했고, user.config는에 결국 :

C : \ 사용자의 AppData \ 로컬 \\ DEA.vshost.exe_Url_sloja2hil2eiypecefjbp1icc1fo50g4 \\ 사용자 \\. 설정

대한 추가 정보는

+0

아쉽게도 내 컴퓨터 시스템 어디서나 user.config 파일을 찾을 수 없습니다. * .config 파일을 검색하고 오늘의 날짜와 시간을 기준으로 결과를 정렬했습니다. 그래도 오늘은 업데이트 된 설정 파일이 없습니다. 검색 결과에는 많은 administration.config, app.config, ApplicationHost.config 등이 표시됩니다. 목록이 너무 길어서 댓글에 없습니다. – ThN

+1

http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx에서 프로세스 모니터를 다운로드하십시오. 필터를 "operation"- "is"- "writefile"로 설정하여 앱을 실행하고 저장 위치를 ​​확인하십시오 (우리에게 알려주면 다른 사람들에게도 유용 할 수 있음) – Eddy

+0

예 !!! 그것을 발견. 고맙습니다. 분명히 AppData 폴더가 숨겨져 있습니다. 따라서 Windows 7 검색 도구는이 모든 것을 건너 뛰었습니다. 그럼, 내 다음 질문은 사전 정의 된 user.config로 소프트웨어를 배포해야하는 경우,이 user.config 파일을 가져 와서 exe 파일을 따라 던지십시오. – ThN

0

내가 델파이에 대해 잘 모르지만, 적어도 C#을 내가 델파이 유사한 파일을 생성합니다 가정이

[global::System.Configuration.UserScopedSettingAttribute()] 
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
[global::System.Configuration.DefaultSettingValueAttribute("foo")] 
public string bar { 
    get { 
     return ((string)(this["bar"])); 
    } 
    set { 
     this["bar"] = value; 
    } 
} 

같은 내용으로, 설정 디자이너에서 실제 코드 파일을 생성 .
기본값은 속성으로 인코딩됩니다. app.config에 아무 것도 지정되어 있지 않으면 기본값이 사용됩니다. app.config에 아무 것도 기록되지 않습니다.
디자이너는 app.config에서 해당 기본값을 만들려고 시도하지만이 값을 제거하면 DefaultSettingValueAttribute의 기본값이 사용됩니다.

app.config에서 수동으로 값을 만드는 경우 해당 값이 사용됩니까?

+1

델파이 프리즘은 마이크로 소프트 비주얼 스튜디오 기반으로 (발언 특별히에 마지막 단락) this MSDN 문서에서 찾을 수 있습니다 비트. 그래서 나는 그들 모두가 비슷한 방식으로 가정하고 있습니다. – ThN

관련 문제