将项目从 .NET 1.1 移动到 .NET 2.0 后,MsBuild 会针对某些 COM 对象发出大量警告。
测试示例代码(实际代码无关紧要,仅用于创建警告):
using System;
using System.DirectoryServices;
using ActiveDs;
namespace Test
{
public class Class1
{
public static void Main(string[] args)
{
string adsPath = String.Format("WinNT://{0}/{1}", args[0], args[1]);
DirectoryEntry localuser = new DirectoryEntry(adsPath);
IADsUser pUser = (IADsUser) localuser.NativeObject;
Console.WriteLine("User = {0}", pUser.ADsPath);
}
}
}
警告消息看起来像
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets:警告:运行时封送处理程序无法封送“ITypeLib.RemoteGetLibAttr”的至少一个参数。因此,此类参数将作为指针传递,并且可能需要不安全的代码来操作。
观察:
- ActiveDs(11 个警告)和 MSXML2(54 个警告)会发生这种情况。
- 我们自己的 COM 对象没有看到。
<Reference>
.csproj 文件中的条目包含属性WrapperTool = "tlbimp"
- 尽管有所有警告,但在运行的系统中没有发现任何问题。
知道如何摆脱警告吗?