Lots of build warnings when COM objects ActiveDs or MSXML2 are referenced

后端 未结 3 1453
我寻月下人不归
我寻月下人不归 2021-01-02 01:34

After moving a project from .NET 1.1 to .NET 2.0, MsBuild emits lots of warnings for some COM objects.

Sample code for test (actual code doesn\'t matter, just used t

相关标签:
3条回答
  • 2021-01-02 01:52

    I had experienced the same problem and fixed it by editing the project file (.csproj), following a suggestion from here:

    https://social.msdn.microsoft.com/Forums/vstudio/en-US/7a7c352b-20cb-4931-b3b5-27e899016f75/turning-off-msbuild-warnings-msb3305?forum=msbuild

    I added the following key to the property group of each build configuration:

    <ResolveComReferenceSilent>True</ResolveComReferenceSilent>
    
    0 讨论(0)
  • 2021-01-02 01:57

    According to a comment in the MDSN article about TLBIMP for 2.0, you can't fix this problem w/o running TLBIMP yourself.

    It was easy to reproduce your problem using VS. I also reproduced it running TLBIMP manually from a VS comment prompt:

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

    The fix was to use the /silent switch

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

    As pointed out in the comment in the MSDN article, the COM reference becomes a .net assembly reference to the interop assembly you built yourself.

    I'm not a VS expert, but I made this work by adding a prebuild to project of:

        "$(DevEnvDir)\..\..\SDK\v2.0\bin\tlbimp" c:\WINNT\system32\activeds.tlb
                /namespace:ActiveDs /silent /out:"$(ProjectDir)interop.activeds.dll"
    

    Built it once so I'd have a dll to add a reference with the browse tab. Added a reference to the interop.activeds.dll in my project root and then built again. You may want to do this some other way, like with an external make file via a C++ project. This is more of a POC.

    Note a funny difference in MSBUILD vs VS, $(DevEnvDir) has a trailing backslash but MSBUILD does not.

    0 讨论(0)
  • 2021-01-02 02:05

    You can stop the warnings with:

        #pragma warning disable warning-list
        #pragma warning restore warning-list
    

    where warning list is a comma seperated list of warning numbers.

    The warning means that the typelib you are importing contains something untranslatable into managed code but could be dealt with using pointer operations, in an unsafe code block. The code was untranslatable in .Net 1.1 as well, but the compiler wasn't smart enough to warn you about the trap you might walk into if you use one of the methods it's warning you about.

    0 讨论(0)
提交回复
热议问题