Zdravím vás všechny. Dodělávám jeden projekt, klasické sestavení se provede bez varování, aplikace zatím funguje správně, ale analýza kódu končí jediným varováním:
Chcete-li snížit riziko zabezpečení, zařaďte pole 'NativeMethods.BROWSEINFOW.Title' jako kódování Unicode, nastavením DllImport.CharSet 'NativeMethods.BROWSEINFOW' na CharSet.Unicode nebo explicitním zařazováním pole jako UnmanagedType.LPWStr. Pokud potřebujete tento řetězec zařadit jako znakovou sadu ANSI nebo závisle na systému, určete explicitně MarshalAs, použijte atribut BestFitMapping pro vypnutí nejlepšího mapování a pro zvýšení zabezpečení, zapněte ThrowOnUnmappableChar.
Tady je snímek místa kam je varování odkazováno:
a tady je ten kód:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public class BROWSEINFOW
{
public IntPtr Owner;
public IntPtr pidlRoot;
public IntPtr pszDisplayName;
public string Title;
public int Flags;
public BrowseFolderCallbackProc callback;
public IntPtr lParam;
public int iImage;
}
[SuppressUnmanagedCodeSecurity]
internal static class Shell32
{
// Methods
[DllImport("shell32.dll", CharSet = CharSet.Unicode, BestFitMapping = false, ThrowOnUnmappableChar = true)]
public static extern IntPtr SHBrowseForFolder([In] BROWSEINFOW lpbi);
}
Nějak to uvedené hlášení nechápu. Zkoušel jsem to různě, ale pořád stejně špatně.
Jak to mám prosím upravit, aby analýza proběhla bez chyb?