代码分析CA1060修复
本文关键字:修复 CA1060 代码 | 更新日期: 2023-09-27 18:11:44
我的应用程序中有以下代码:
[DllImport("user32.dll")]
private static extern int GetWindowLong(IntPtr hwnd, int index);
[DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr hwnd, int index, int newStyle);
[DllImport("user32.dll")]
private static extern bool SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter,
int x, int y, int width, int height, uint flags);
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hwnd, uint msg,
IntPtr wParam, IntPtr lParam);
我从代码分析(FxCop)得到以下警告:
谁能告诉我应该把他们放在哪个班?我不知道它是Native, SafeNative还是UnsafeNativeCA1060: Microsoft。设计:因为它是一个P/Invoke方法,"IconHelper。GetWindowLong(IntPtr, int)'应该在类中定义
命名为native emethods、safenactive emethods或unsafenactive emethods。
您有关于此警告的详细信息:http://msdn.microsoft.com/en-us/library/ms182161.aspx。简而言之:
对于大多数应用程序,将p/invoke移动到一个名为nativeemethods的新类中就足够了。
尝试将它们全部移动到一个native emethod类中,它将解决问题
修复后你的代码应该是这样的
public class NativeMethods {
[DllImport("user32.dll")]
private static extern int GetWindowLong(IntPtr hwnd, int index);
[DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr hwnd, int index, int newStyle);
[DllImport("user32.dll")]
private static extern bool SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter,
int x, int y, int width, int height, uint flags);
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hwnd, uint msg,
IntPtr wParam, IntPtr lParam);
}
记住要改变所有调用这些方法的地方
更改前
SendMessage(IntPtr hwnd, uint msg,IntPtr wParam, IntPtr lParam)
应为
NativeMethods.SendMessage(IntPtr hwnd, uint msg,IntPtr wParam, IntPtr lParam)
可以通过定义
来抑制此警告。<PropertyGroup>
.....
<NoWarn>CA1060</NoWarn>
.....
</PropertyGroup>
配置文件中的。csproj文件)。