【发布时间】:2011-04-18 18:30:31
【问题描述】:
我在 C# 项目中有一个 HTTPSystemDefinitions.cs 文件,它基本上描述了托管代码使用的旧 Windows ISAPI。
这包括与 ISAPI 相关的完整结构集,而不是全部或由代码使用。在编译时,这些结构的所有字段成员都会导致如下警告:-
警告字段 'UnionSquare.ISAPI.HTTP_FILTER_PREPROC_HEADERS.SetHeader' 从未分配给,并且始终具有其默认值 null
或
警告从未使用过“UnionSquare.ISAPI.HTTP_FILTER_PREPROC_HEADERS.HttpStatus”字段
可以用#pragma warning disable 禁用这些吗?如果是这样,相应的错误编号是多少?如果没有,我还能做些什么吗?请记住,我只对此文件执行此操作,重要的是我会看到来自其他文件的此类警告。
编辑
示例结构:-
struct HTTP_FILTER_PREPROC_HEADERS
{
//
// For SF_NOTIFY_PREPROC_HEADERS, retrieves the specified header value.
// Header names should include the trailing ':'. The special values
// 'method', 'url' and 'version' can be used to retrieve the individual
// portions of the request line
//
internal GetHeaderDelegate GetHeader;
internal SetHeaderDelegate SetHeader;
internal AddHeaderDelegate AddHeader;
UInt32 HttpStatus; // New in 4.0, status for SEND_RESPONSE
UInt32 dwReserved; // New in 4.0
}
【问题讨论】:
-
你能显示这些字段的声明,或者更确切地说,它们所在的结构吗? IE。举个例子。
-
如果这些是互操作定义,那么通常你会输入
[StructLayout(LayoutKind.Sequential)]以确保内存布局是正确的(在当前的实现中,即使没有这个属性,但AFAIK不能保证)。如果我没记错的话,C# 编译器会检测到此属性的存在并自动抑制这些警告,因为它知道字段必须存在才能进行互操作。 (我可能错了,因此发布为评论而不是答案)。 -
@Greg:这是有用的信息,我将进行调查我宁愿不生成警告而不是抑制它们。
-
+1 用于使用
StructLayout。这似乎比隐藏警告本身更干净。 -
@GregBeech 你是对的!这仍然适用于 VS2017 上的 .NET Standard 项目。
标签: c# visual-studio suppress-warnings