gpt4 book ai didi

.net - 引用 COM 对象 ActiveD 或 MSXML2 时出现大量构建警告

转载 作者:行者123 更新时间:2023-12-04 00:49:16 27 4
gpt4 key购买 nike

将项目从 .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 :警告:运行时编码(marshal)拆收器无法编码(marshal)“ITypeLib.RemoteGetLibAttr”的至少一个参数。因此,此类参数将作为指针传递,并且可能需要不安全的代码进行操作。

观察:
  • 发生在 ActiveD(11 个警告)和 MSXML2(54 个警告)上。
  • 没有看到我们自己的 COM 对象。
  • <Reference> .csproj 文件中的条目包含属性 WrapperTool = "tlbimp"
  • 尽管有所有警告,但在运行系统中没有观察到任何问题。

  • 知道如何摆脱警告吗?

    最佳答案

    根据 MDSN article about TLBIMP for 2.0 中的评论,您无法在不自己运行 TLBIMP 的情况下解决此问题。

    使用 VS 很容易重现您的问题。我还从 VS 注释提示手动复制了它运行 TLBIMP:

       tlbimp c:\WINNT\system32\activeds.tlb /out:interop.activeds.dll

    修复方法是使用/silent 开关
       tlbimp c:\WINNT\system32\activeds.tlb /silent /out:interop.activeds.dll

    正如 MSDN 文章中的评论所指出的,COM 引用变成了对您自己构建的互操作程序集的 .net 程序集引用。

    我不是 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++ 项目使用外部 make 文件。这更像是一个 POC。

    注意 MSBUILD 与 VS 的一个有趣的区别,$(DevEnvDir) 有一个尾部反斜杠,但 MSBUILD 没有。

    关于.net - 引用 COM 对象 ActiveD 或 MSXML2 时出现大量构建警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/269063/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com