Benutzer mit den meisten Antworten
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
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
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. -
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. -
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
-
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
-
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
-
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
-
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