私が保守しているユーティリティでコード分析を実行したところ、これを変更するようにアドバイスされました。
private static extern int ReadMenu1File(string Menu1Path);
...これに:
private static extern int ReadMenu1File(UnmanagedType.LPWStr Menu1Path);
...この言い回しで:「P/Invoke 文字列引数のマーシャリングを指定してください。セキュリティ リスクを軽減するには、DllImport.CharSet を CharSet.Unicode に設定するか、パラメータを UnmanagedType.LPWStr として明示的にマーシャリングして、パラメータ 'Menu1Path' を Unicode としてマーシャリングします。この文字列を ANSI またはシステム依存としてマーシャリングする必要がある場合は、MarshalAs を明示的に指定し、BestFitMapping=false を設定します。セキュリティを強化するには、ThrowOnUnmappableChar=true も設定してください。"
...しかし、私が行ったとき、「型名「LPWStr」は型「System.Runtime.InteropServices.UnmanagedType」に存在しません」および「「System.Runtime.InteropServices.UnmanagedType.LPWStr」は「です」と表示されますフィールド」ですが、「タイプ」のように使用されます」
コード補完は役に立ちません (「UnmanagedType.」と入力した後の提案はありません) また、不足している using を追加するコンテキスト メニュー オプションもありません。