C# 代码分析CA1060修复程序
我的应用程序中有以下代码:C# 代码分析CA1060修复程序,c#,code-analysis,fxcop,C#,Code Analysis,Fxcop,我的应用程序中有以下代码: [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 stat
[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)中得到以下警告:
CA1060:Microsoft.Design:因为它是一个p/Invoke方法,
应在类中定义“IconHelper.GetWindowLong(IntPtr,int)”
命名的NativeMethods、SafeNativeMethods或UnsafentiveMethods
有人能告诉我应该把它们放在哪一类吗?我不知道它是本机的、安全的还是非防护性的。您在这里有关于此警告的详细信息:。简言之: 对于大多数应用程序,将p/Invokes移动到名为NativeMethods的新类就足够了
尝试将它们全部移动到NativeMethod类中,这样可以解决问题 修复后的代码应该是这样的
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>
.....
CA1060
.....
在配置文件(.csproj文件)中。可能重复的方法不应该是公共的吗?在上述代码中,方法应该是“内部的”。“Public”raise warning“ca1401p/Invokes不应可见”将其变为静态类也很明智(您只是将方法放在该类中,而不是在其中保存任何状态)。因此,您的类声明类似于
内部静态类NativeMethods{…