Domanda

Sto usando 3.5 SP1 sulla mia macchina, mentre i nostri clienti attualmente usano 3.5 senza SP1. In VS2008 non conosco alcun modo per indirizzare la soluzione o il progetto a 3.5 senza SP1, ho installato solo 3.5 con SP1.

Se utilizziamo funzioni o costruttori non disponibili in 3.5 senza SP1 il codice non funzionerà correttamente.

Cioè, voglio rilevare in tempo di compilazione cosa non funzionerebbe senza SP1.

Finora abbiamo eseguito i test (in una macchina virtuale o in una macchina separata) per vedere se l'applicazione si interrompe e a volte si interrompe quando abbiamo usato parti dell'API non disponibili fino a SP1. Il problema è che si interrompe solo quando il codice viene effettivamente eseguito (in fase di esecuzione), non quando viene caricato l'assembly.

Una soluzione sarebbe quella di avere una macchina con VS2008 senza SP1 e provare a compilare il progetto. Tuttavia preferirei alcuni strumenti per aiutarmi a rilevare una dipendenza da 3.5 SP1 (a causa dell'uso di nuove API o altro), analizzando il codice sorgente o gli assembly che produciamo.

I miei poteri su Google non sono stati abbastanza forti con questa domanda, qualche suggerimento?

È stato utile?

Soluzione

Ho appena avuto lo stesso problema e ho trovato una soluzione. Per la nostra applicazione, è stata una chiamata a System.Threading.WaitHandle.WaitOne (Int32) che ci ha messo nei guai. Per ulteriori dettagli su come i riferimenti alle API introdotte nelle versioni del service pack possono infiltrarsi nel codice senza che Visual Studio lo noti, vedere Il post di Krzysztof Cwalina .

La buona notizia è che, come Marc ha menzionato la sua risposta , FxCop ha un nuova regola che rileva queste perdite. La cattiva notizia è che la regola è infranta in FxCop 1.36 quando si sceglie .NET Framework 3.5. Tuttavia, David Kean descrive come modificare un paio di file di configurazione XML in risolvi il problema . Ho seguito le istruzioni e FxCop ora rileva i miei riferimenti alle API del service pack.

Altri suggerimenti

Che ne dici di questo ? (regole multi-targeting per FxCop)

Puoi usare il codice trovato qui per rilevare .NET Frameworks installato.

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

if (Fx35ServicePack == null || (int) Fx35ServicePack < 1) genera una nuova eccezione (" .NET Framework 3.5 SP1 è richiesto. ");

C'è un'altra opzione che non ho provato. La documentazione di Visual Studio afferma che puoi fare in modo che il tuo programma di installazione ClickOnce abbia come target specifico il framework .NET 3.5SP1. Segui il collegamento e cerca & Quot; Targeting .NET Framework Versione 3.5 SP1 & Quot ;. In sostanza, si dice che una delle seguenti operazioni costringerà il programma di installazione a installare 3.5SP1:

  • Specifica un URL di errore nella finestra di dialogo Opzioni pubblicazione.
  • Specifica un nome Suite nella finestra di dialogo Opzioni pubblicazione.
  • Crea un collegamento sul desktop nella finestra di dialogo Opzioni pubblicazione.
  • Escludere un file dall'hash nella finestra di dialogo File dell'applicazione.
  • Deseleziona la casella di controllo Firma i manifest di ClickOnce nella pagina Firma.
  • Aggiungi un riferimento all'assembly System.Data.Entity.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top