很多的建立的警告时,COM对象ActiveDs或MSXML2是引用
-
06-07-2019 - |
题
移动后的一个项目。净1.1。网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"
- 尽管所有警告,没有任何问题已经观察到的在运行的系统。
任何知道怎样摆脱这些警告?
解决方案
根据一个评论 MDSN条约TLBIMP为2.0, 你不能解决这个问题w/o运行TLBIMP自己。
很容易再现你的问题采用VS。我也转载它运行TLBIMP手从一个评论VS提示:
tlbimp c:\WINNT\system32\activeds.tlb /out:interop.activeds.dll
修复使用/无声的开关
tlbimp c:\WINNT\system32\activeds.tlb /silent /out:interop.activeds.dll
如指出的评论在MSDN文章,COM参考成为一个.净大会参考的互操作会为你建立自己。
我不是一个VS的专家,但是我做了这项工作通过加入一个预生成的项目:
"$(DevEnvDir)\..\..\SDK\v2.0\bin\tlbimp" c:\WINNT\system32\activeds.tlb
/namespace:ActiveDs /silent /out:"$(ProjectDir)interop.activeds.dll"
建立这一次,所以我有一个dll添加一个参考的浏览选项。增加一个参考interop.activeds.dll 在我的项目根然后建一次。你可能会想要这么做一些其他办法,如与外部作出文件经C++的项目。这是更多的POC。
注意到一个有趣的差异MSBUILD vs VS,$(DevEnvDir)末尾有反斜杠,但MSBUILD不。
其他提示
我已经经历了同样的问题和固定它通过编辑的项目文件(.csproj),以下建议:
我加入以下关键的业集团的每个建立配置:
<ResolveComReferenceSilent>True</ResolveComReferenceSilent>
你可以停止的警告:
#pragma warning disable warning-list #pragma warning restore warning-list
那里的警告名单是一个逗号分开列的预警数字。
告警装置的类型库你是进口含有的东西不可译成托管的代码,但可能是处理与使用操作指针,在一个安全代码块。代码是不可译。净1.1为好,但编译器没有足够的智慧来警告你的陷阱,你可以走到如果使用的方法之一,这是警告你关于。