Frage

Ich bin mit 3.5 SP1 auf meinem Rechner, während unsere Kunden zur Zeit 3.5 ohne SP1 verwenden. Ich weiß nicht, jede mögliche Weise, in VS2008 die Lösung oder das Projekt auf 3,5 ohne SP1 zum Ziel, nur die 3.5 mit SP1 habe ich installiert.

Wenn wir verwenden Funktionen oder Konstrukteuren nicht verfügbar in 3,5 w / o SP1 wird der Code nicht richtig funktionieren.

Das heißt, ich will bei erkennen Kompilierung , was ohne SP1 nicht funktionieren würde.

Bisher haben wir Tests durchgeführt (in einem VM oder anderer Maschine), wenn die Anwendung Pausen, um zu sehen, und es manchmal nicht bricht, wenn wir Teile der API nicht verfügbar, bis SP1 verwendet haben. Das Problem ist, dass es nur bricht, wenn der Code ausgeführt werden tatsächlich (zur Laufzeit), nicht, wenn die Baugruppe geladen wird.

Eine Lösung wäre, eine Maschine mit VS2008 hat w / o SP1 und versucht, das Projekt zu kompilieren. Ich würde jedoch ein Tool vorziehen, mir zu helfen, eine Abhängigkeit zu 3.5 SP1 zu erkennen (durch die Verwendung von neuen API, oder was auch immer), entweder durch den Quellcode zu analysieren, oder die Baugruppen wir produzieren.

Meine Google Befugnisse hat nicht mit dieser Frage stark genug gewesen, irgendwelche Hinweise?

War es hilfreich?

Lösung

Ich hatte gerade das gleiche Problem, und ich fand eine Lösung. Für unsere Anwendung war es einen Aufruf an System.Threading.WaitHandle.WaitOne (Int32), die uns in Schwierigkeiten geraten. Weitere Informationen dazu, wie Verweise auf APIs, die in Service Pack-Versionen eingeführt wurden, können ohne Visual Studio Bemerken in Ihren Code Leck finden Sie unter Krzysztof Cwalina der Post .

Die gute Nachricht ist, dass, wie Marc erwähnt seine Antwort ist, hat FxCop ein neue Regel , die diese Lecks erkennen. Die schlechte Nachricht ist, dass die Regel in FxCop 1,36 gebrochen wird, wenn Sie .NET Framework 3.5 Ziel. David Kean beschreibt jedoch, wie ein paar XML-Konfigurationsdateien auf das Problem beheben . Ich folgte den Anweisungen und FxCop erkennt nun, meine Referenzen auf Service Pack API.

Andere Tipps

Wie wäre es? dieses ? (Multi-Targeting-Regeln für FxCop)

Sie können den Code verwenden, gefunden hier zu erkennen die installierten .NET Frameworks.

string Fx35RegistryKey = @ "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ v3.5"; Objekt Fx35ServicePack = Registry.GetValue (Fx35RegistryKey, "SP", null);

if (Fx35ServicePack == null || (int) Fx35ServicePack <1) throw new Exception ( "NET Framework 3.5 SP1 erforderlich ist..");

Es gibt eine andere Option, die ich habe nicht versucht. Die Visual Studio-Dokumentation sagt, dass Sie Ihren Installateur Clickonce speziell Ziel machen können .NET 3.5SP1 Rahmen. Folgen Sie dem Link und suchen Sie nach "Targeting .NET Framework Version 3.5 SP1". Im Wesentlichen sagt es eine der folgenden Bedingungen tun wird das Installationsprogramm zwingen 3.5SP1 zu installieren:

  • Geben Sie einen Fehler URL im Publish Dialogfeld Optionen.
  • Geben Sie einen Namen in der Suite veröffentlicht Dialogfeld Optionen.
  • Erstellen Sie eine Desktop-Verknüpfung im Publish Dialogfeld Optionen.
  • Ausschließen eine Datei aus dem Hash in dem Anwendungsdialogfeld Dateien.
  • Deaktivieren Sie das Zeichen der Clickonce-Kontrollkästchen auf der Seite Signing manifestiert.
  • Fügen Sie einen Verweis auf die System.Data.Entity Montage.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top