none
Exception zu System.Web bei 4.0 Profile-Kompilierung

    Frage

  • Hallo

    Ich habe eine einfache WinForm-Anwendung um die Werte einer config-Datei zu konfigurieren. Diese config-Datei wird dann von einem anderen Programm genutzt.

    Im Visual Studio habe ich das Profile auf 4.0 Client eingestellt. Im Code prüfe ich gleich beim Starten, ob ich auf die config-Datei zugreiffen kann(falls Rechte fehlen, soll dann eine Meldung erscheinen).

    In sSystemConfigFilePath steht das Verzeichnis aus CommonApplicationData und dazu der Dateiname.                 Dim oFileMap As ExeConfigurationFileMap = New ExeConfigurationFileMap()                 oFileMap.ExeConfigFilename = sSystemConfigFilePath                 Dim oSystemConfig As System.Configuration.Configuration = Nothing                 oSystemConfig = ConfigurationManager.OpenMappedExeConfiguration(oFileMap, ConfigurationUserLevel.None)                 oSystemConfig.Save(ConfigurationSaveMode.Minimal, True)

    Wenn .NET Full installiert ist, funktioniert das Problem. Ich kann die config-Datei z.B. als Schreibgeschützt markieren und dann gibt es beim Save eine Exception(welche abgefangen wird, hier aber nicht aufgeführt ist).

    Wenn ich aber wie im VS definiert habe, nur 4.0 Profile installiert habe, gibt es den Fehler: Die Datei oder Assembly "System.Web" oder eine Abhängigkeit davon wurde nicht gefunden...."

    Warum wird System.Web doch benötigt, obwohl ich ja festgelegt habe, dass Client-Profile vorausgesetzt wird. Müsste mir VS dann nicht einen Fehler geben? Bei anderen Fällen(wenn eine DLL mit Full-Profile) war das auch der Fall.

    Gruss Christoph


    Donnerstag, 15. August 2013 20:17

Antworten

  • Hallo Elmar

    Habe noch etwas ausprobiert und jetzt geht es.

    Wenn beim .Save kein ForceSaveAll= true gesetzt wird, funktioniert das Speichern.

    http://msdn.microsoft.com/en-us/library/ms134089%28v=vs.100%29.aspx

    Keine Ahnung, warum es so ist, aber damit kann ich leben(umgehen).

    Gruss Christoph

    • Als Antwort markiert chmav Freitag, 16. August 2013 16:37
    Freitag, 16. August 2013 16:37

Alle Antworten

  • Hallo, hast du denn einen Verweis auf System.Web gesetzt? Im Client Profile ist dieser Verweis nämlich nicht verfügbar.

    Versuche ihn ggf. mal zu entfernen (Projekt > Projekt-Eigenschaften > Verweise).


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Donnerstag, 15. August 2013 20:28
  • Dazu gibt es keine Verweise, damit liesse sich die Anwendung auch nicht erstellen.

    Das würde VS ja gut machen, aber anscheinend wird da doch in einer Abhängigkeit von System.Configuration.Configuration System.Web benötigt.

    Donnerstag, 15. August 2013 20:56
  • Dann poste mal die genaue Exception mit Stacktrace etc.
    System.Configuration verweist nicht auf System.Web. Darum ergibt deine Beschrebung des Fehlers auch so wenig Sinn. Ich dachte nur im ersten Moment an inen Fehler in Visual Studio.

    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Donnerstag, 15. August 2013 21:06
  • Hallo

    Hier die Info

    https://dl.dropboxusercontent.com/u/3565205/System_Web_Exception.png

    Gruss Christoph

    Donnerstag, 15. August 2013 21:11
  • Hallo Christoph,

    was befindet sich in der Anwendungs-Konfiguration? Denn da dort auf Reflection zurückgegriffen wird, kann es auch ohne explizite Verweise dazu führen, dass sich daraus indirekt ein Verweis ergibt.

    Damit die System.Web nicht benötigt wird, wurden einige Änderungen explizit vorgenommen, siehe
    http://blogs.msdn.com/b/jgoldb/archive/2010/04/12/what-s-new-in-net-framework-4-client-profile-rtm.aspx und dort
    What components are new in NET4 Client Profile RTM?.

    Wobei ich i. a. immer "Full" verteilen würde, da der Unterschied nun nicht sehr groß ist (und bei 4.5 hat man deswegen die Trennung aufgehoben).

    Gruß Elmar

    Freitag, 16. August 2013 08:25
  • Hallo Elmar

    Nein, nichts mit Reflection(zumindest nicht in meinem Code).

    Aus dieser config-Datei werden die Werte gelesen, in einem Formular angezeigt, können geändert werden und dann werden diese gespeichert.

    Damit nicht erst beim Speichern die Meldung kommt, dass wegen den Rechten etwas nicht geht, mache ich beim Starten vom Programm eine solche Speicherung.

    Das Try/Catch ist genau um die Save-Funktion herum.

    Die Client-Version habe ich gewählt, damit möglichst wenige User noch das .NET einspielen müssen.

    In deinem Link wird ja auch empfohlen, dass Full nur wenn wirklich nötig zu nehmen.

    Evt. einen anderen Vorschlag, wie eine .config-Datei gelesen/geschrieben werden kann ausser über System.Configuration.Configuration

    Die Datei liegt nicht im Anwedungsverzeichnis sondern im CommonApplicationData-Verzeichnis.

    Gruss Christoph

    Freitag, 16. August 2013 08:41
  • Hallo Christoph,

    gibt es in der Konfigurationsdatei spezielle Konfigurationsabschnitte, siehe
    Gewusst wie: Erstellen von benutzerdefinierten Konfigurationsabschnitten mit ConfigurationSection

    (und auch in Konfigurationsdatei der Anwendung selbst gucken, nicht nur in der ausgelagerten).

    Konfigurationsdateien sind Xml Dateien so dass die Standard Methode wie XDocument, XmlDocument funktionieren - macht aber etwas Zusatzaufwand.

    Was das .NET Framework angeht: Irgendwann braucht eine Anwendung "Full" und dann wird es nachinstalliert und die allfälligen Windows Updates wegen div. Security Hotfixes kommen noch ein Weiteres mal dran.

    (Und wegen der paar MB lohnt die Ersparnis nun wirklich nicht, da brauchen die Windows Media Daten und anderer Schnickschnack schon mehr ;)

    Gruß Elmar

    Freitag, 16. August 2013 09:20
  • Hallo Elmar

    Seltsam, dass es da nicht mit Client-Profile geht.

    Weil halt 4.0 Client öfters schon installiert ist, wollte ich den User davor verschonen, noch die Full-Version installieren zu müssen. VS-Erzeugen funktioniert ja auch.

    Nun ja, werde dann schauen, dass ich das WIX-Setup gleich mit dieser Installation versehen kann.

    Gruss Christoph

    Freitag, 16. August 2013 15:56
  • Hallo Elmar

    Habe noch etwas ausprobiert und jetzt geht es.

    Wenn beim .Save kein ForceSaveAll= true gesetzt wird, funktioniert das Speichern.

    http://msdn.microsoft.com/en-us/library/ms134089%28v=vs.100%29.aspx

    Keine Ahnung, warum es so ist, aber damit kann ich leben(umgehen).

    Gruss Christoph

    • Als Antwort markiert chmav Freitag, 16. August 2013 16:37
    Freitag, 16. August 2013 16:37