Avatar billede Jim Rasmussen Novice
04. august 2011 - 23:34 Der er 16 kommentarer og
1 løsning

Når jeg nu vil publisere mit projekt

Jeg har en xml fil der er meget vigtig for mit program. Filen ligger i rod mappen sammen med .exe osv for mit projekt.

Men. Når jeg publicere mit projekt så ændre stien til min xmlfil tror jeg? Den kan i hvert fald ikke finde den mere? 

Hvad gør jeg for at dette ikke sker? (:

Finder den ved brug af denne sti. "filensNavn.xml"
Avatar billede Jim Rasmussen Novice
04. august 2011 - 23:34 #1
Det er et WPF projekt
Avatar billede bvli Praktikant
04. august 2011 - 23:37 #2
Hvordan tilgår du den?
Avatar billede bvli Praktikant
04. august 2011 - 23:42 #3
Du bør ikke tilgå den relativt (hvis du altid KUN vil have fat i den som ligger hvor din .exe-fil ligger). For når du gør det, så kigger dit program i dit current directory. Og hvis current directory ikke er det samme som programbiblioteket, så fejler det.

string fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "filensNavn.xml");
Avatar billede Jim Rasmussen Novice
04. august 2011 - 23:42 #4
string settingFile = AppDomain.CurrentDomain.BaseDirectory + "Settings.xml";
Avatar billede Jim Rasmussen Novice
04. august 2011 - 23:45 #5
Er det ikke det samme jeg gør? (:
Avatar billede bvli Praktikant
04. august 2011 - 23:54 #6
Lav en:

string settingsFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "settings.xml");
if (!File.Exists(settingsFile) {
  Trace.WriteLine("Settings file: " + settingsFile);
  Debugger.Break();
}

Det kan måske have noget at gøre med den måde du laucher programmet på. Kører du via Click Once f.eks?
Avatar billede Jim Rasmussen Novice
04. august 2011 - 23:54 #7
Hvis jeg nu bare tilføjer en xmlfil ved brug af #Solution explorer" under mit projekt. Hvordan tilgår jeg den så? Så ligger den vel ikke i "BaseDirectory" ?
Avatar billede bvli Praktikant
04. august 2011 - 23:59 #8
Nu ved jeg jo ikke hvordan du publicerer - om du laver et setup project eller hur? Men altså, jeg regner med at du har sat properties på filen til "Copy to output directory" e.lign. Du skal selvfølgelig sørge for, at filen findes i slutbiblioteket, også når det er publiceret og installeret. Men det tog jeg jo li'som for givet at du havde ;)

Har du ikke overvejet at bruge den indbyggede metode til settingsfiler? Det gør det hele meget nemmere. Og du behøver ikke distribuere nogen fil med, hvis du bare vil bruge default values. Hvis brugeren så ændrer sine indstillinger, sørger settingskomponenten selv for at gemme (og hente næste gang) i IsolatedStorage.
Avatar billede Jim Rasmussen Novice
05. august 2011 - 00:00 #9
ja. bruger Click Once.

Har også prøvet med den Setup.exe den laver
Avatar billede Jim Rasmussen Novice
05. august 2011 - 00:03 #10
Kigger jeg lige på. (: vender tilbage imorgen

Men ville egentlig gerne vide svaret på #7 :D

Og kan du give et lille eksempel på den metode til settings filer? (: eller et link til hvor jeg kan læse om det? (:
Avatar billede bvli Praktikant
05. august 2011 - 00:17 #11
Svaret på #7 er, at du skal højreklikke på settingsfilen, vælge properties. I properties skal du angive (under build action - mener jeg det hedder - eller ihvertfald noget lignende), at den skal kopieres til output directory.

Hvis du bygger et setup projekt, skal du også huske at inkludere den der. (Under file system)

Settings filer:
Højreklik på dit projekt. Properties.
I properties er der et faneblad der hedder Settings.
Klik på det. Nu siger den at du skal klikke på et link for at få dannet en setting-fil. Det gør du så. Nu dukker der en editor op, hvor du kan tilføje en setting -> navn, datatype, usersetting eller programsetting, og en default value. Når du har lavet en setting (eller flere) tilgår du dem sådan:

using DitNameSpace.Properties;


[...]

string mySetting = Settings.Default.NavnetDuGavDinSetting;


[...]

Er der steder du ændrer din setting i programmet, skal du huske at gemme den igen (inden du afslutter ihvertfald). Der er også en masse dejlige events o.lign. du kan rode med. Men det her er da en start.

http://msdn.microsoft.com/en-us/library/aa730869%28v=vs.80%29.aspx
Avatar billede Jim Rasmussen Novice
05. august 2011 - 17:29 #12
Nu har jeg sat xml filen til "Copy if newer" og build action til "none" IKKE Resource! :p


Men når jeg publisher projektet siger den igen at xmlfilen ikke findes?

Kigger nok nærmer på den indbyggede settings funktion. Men dette problem vil jo også opstå ved alle andre "Build action = none" filer? Så skal lige have fundet en løsning her (:

Nogle bud??
Avatar billede Jim Rasmussen Novice
05. august 2011 - 17:30 #13
string settingFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Settings.xml");
       

Ovenfor er vist hvordan jeg tilgår filen.
Avatar billede Jim Rasmussen Novice
05. august 2011 - 17:32 #14
Denne fejl opstår:

System.IO.FileNotFoundException was unhandled
  Message=Could not find file 'C:\Users\Jim\AppData\Local\Apps\2.0\ZGVDP7TA.TZJ\1AQTTDKR.O0O\code..tion_0059496f31f2d013_0001.0000_94e5c7768bdcf032\Settings.xml'.
  Source=mscorlib
  FileName=C:\Users\Jim\AppData\Local\Apps\2.0\ZGVDP7TA.TZJ\1AQTTDKR.O0O\code..tion_0059496f31f2d013_0001.0000_94e5c7768bdcf032\Settings.xml
  StackTrace:
      at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
      at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
      at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
      at System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials)
      at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)
      at System.Xml.XmlReader.Create(String inputUri, XmlReaderSettings settings, XmlParserContext inputContext)
      at System.Xml.XmlReader.Create(String inputUri, XmlReaderSettings settings)
      at System.Xml.Linq.XDocument.Load(String uri, LoadOptions options)
      at System.Xml.Linq.XDocument.Load(String uri)
      at xmlConnect.SettingsFac.getXml()
      at CodeKeeber.MainWindow.btnLogin_Click(Object sender, RoutedEventArgs e)
      at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
      at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
      at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
      at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
      at System.Windows.Controls.Primitives.ButtonBase.OnClick()
      at System.Windows.Controls.Button.OnClick()
      at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
      at System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
      at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
      at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
      at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
      at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
      at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
      at System.Windows.UIElement.CrackMouseButtonEventAndReRaiseEvent(DependencyObject sender, MouseButtonEventArgs e)
      at System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
      at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
      at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
      at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
      at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
      at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
      at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
      at System.Windows.Input.InputManager.ProcessStagingArea()
      at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
      at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
      at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
      at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
      at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
      at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
      at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
      at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
      at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
      at System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
      at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Boolean isSingleParameter)
      at System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
      at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
      at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
      at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
      at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
      at System.Windows.Threading.Dispatcher.Run()
      at System.Windows.Application.RunDispatcher(Object ignore)
      at System.Windows.Application.RunInternal(Window window)
      at System.Windows.Application.Run(Window window)
      at System.Windows.Application.Run()
      at CodeKeeber.App.Main()
  InnerException:
Avatar billede Jim Rasmussen Novice
05. august 2011 - 21:17 #15
Mangler VIRKELIG et svar!! (:

Er der slet ingen der ved hvad man gør??

Har søgt på google. Men fandt intet der hjalp
Avatar billede Jim Rasmussen Novice
06. august 2011 - 01:01 #16
under properties --> publish --> Application data for mit projekt skulle xml filen sættes til include. ikke include(auto).

Det skal man åbenbart altid gøre med xml filer. Da de som standart er Data filer

Lidt info her --> http://msdn.microsoft.com/en-us/library/xtkkwf3d.aspx
Avatar billede bvli Praktikant
06. august 2011 - 14:45 #17
Fra et tidligere indlæg:

"Du skal selvfølgelig sørge for, at filen findes i slutbiblioteket, også når det er publiceret og installeret. Men det tog jeg jo li'som for givet at du havde ;)"
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester