2009-09-18 11 views

risposta

7

è una convenzione, non Un requisito. Se rifletti nel CLR e dai un'occhiata al codice, vedrai spesso il codice P/Invoke all'interno di una classe NativeMethods. Credo che FxCop consiglierà di inserire il codice P/Invoke in una classe come questa se lo incontra.

1

Non sono gestiti specificamente dal CLR. È semplicemente raccomandabile fare pratica per avere il P/Invokes all'interno di una classe chiamata NativeMethods, SafeNativeMethods o UnsafeNativeMethods.

Vedrai questa raccomandazione entrare in gioco se esegui FxCop sui tuoi assiemi.

2

E 'solo una convenzione che dice che è necessario posizionare p/richiamare i metodi in classi denominate * NativeMethods, ma non c'è nessun vincolo tecnico per impedire di farlo a modo tuo ...

2

È possibile assegnare un nome alle classi in questo modo, ma si continuerà a ricevere l'avviso di analisi del codice CA1060. Questo avviso indica che non stai seguendo la convenzione. Quindi, per evitare questo avvertimento, è necessario seguire la convenzione quando si nominano classi che hanno metodi P/Invoke. Se si desidera classificare i metodi P/Invoke, è possibile utilizzare gli spazi dei nomi. Ad esempio:

  • MyProject.Com.NativeMethods
  • MyProject.User32.NativeMethods
  • MyProject.OleStorage.NativeMethods
+0

La mia interpretazione di tale collegamento è che si tratta di una convenzione, non è che il il runtime fa qualcosa di diverso. Lo sviluppatore è responsabile di inserire gli attributi di sicurezza appropriati nelle classi. Ad esempio: "NativeMethods: questa classe non sopprime i percorsi di stack per il permesso di codice non gestito." System.Security.SuppressUnmanagedCodeSecurityAttribute non deve essere applicato a questa classe. "" –

+0

Rilevante anche: "Queste classi assomigliano alla classe NativeMethods, tuttavia, sono contrassegnato utilizzando uno speciale attributo denominato SuppressUnmanagedCodeSecurityAttribute. Quando questo attributo viene applicato, il runtime non esegue una passeggiata completa dello stack per assicurarsi che tutti i chiamanti dispongano dell'autorizzazione UnmanagedCode. Il runtime normalmente controlla questa autorizzazione all'avvio. ... Tuttavia, dovresti usare questo attributo con molta cura e può avere serie implicazioni sulla sicurezza se viene implementato in modo errato .. " –

+0

Grazie, sono corretto. Ho aggiornato la mia risposta. –

Problemi correlati