代码分析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)得到以下警告:

CA1060: Microsoft。设计:因为它是一个P/Invoke方法,"IconHelper。GetWindowLong(IntPtr, int)'应该在类中定义

命名为native emethods、safenactive emethods或unsafenactive emethods。
谁能告诉我应该把他们放在哪个班?我不知道它是Native, SafeNative还是UnsafeNative

代码分析CA1060修复

您有关于此警告的详细信息: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文件)。