Je veux mettre toutes les signatures des fonctions API Windows que j'utilise dans les programmes d'une classe, comme WinAPI, et dans un fichier WinAPI.cs que je vais inclure dans mes projets. La classe sera statique interne et les méthodes public static extern. (Quelque chose comme l'énorme NativeMethods.cs du code source .NET Framework).Grand fichier source C# avec les signatures, structures, constantes de la méthode API Windows: seront-ils tous inclus dans le fichier .exe final?
Disons que WinAPI.cs a une centaine de signatures méthodes natives comme:
[DllImport("user32.dll")]
internal static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
Si je vais seulement utiliser certains d'entre eux dans un projet (même un ou deux), si J'inclus le fichier WinAPI.cs dans mon projet, le .exe final sera-t-il rempli avec les déclarations de méthodes inutiles que je n'utilise pas (les 99 autres)? En ce qui concerne les déclarations de structure native, si je ne les utilise pas dans le projet en cours, seront-elles toujours incluses dans le fichier .exe final?
[StructLayout(LayoutKind.Sequential)] public struct POINT { public int X; public int Y; }
Qu'en déclarations constantes ou des membres readonly comme:
public const int WH_JOURNALPLAYBACK = 1; public static readonly int WM_GETTEXT = 0x0D;
Savez-vous pourquoi sont-ils tous inclus? C'est un cours interne, donc il ne devrait pas être référencé de l'extérieur. Pourquoi le compilateur C# ne peut-il pas voir les déclarations inutilisées et les supprimer simplement? – AnAurelian
@David Parce que vous ne savez pas au moment de la compilation si elles seront utilisées ou non. Tout assembly (y compris les fichiers .exe) peut avoir besoin d'être référencé par un autre projet, et vous ne le savez pas lorsque vous compilez le projet. –
Même si c'est un cours interne? "Les types ou membres internes sont accessibles uniquement dans les fichiers d'un même assembly"? – AnAurelian