将项目从.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"
- 尽管有所有警告,但在运行系统中没有发现任何问题。
知道怎么摆脱警告吗?