TFS Build server and COM references - does this wo

2020-01-29 16:32发布

问题:

On my Developer PC i have registered the according dll´s and referenced them. (Add reference -> COM) On the TFS build server this of course causes errors since the references are not registered there and wont be in the future.

What is the best way to circumvent this?

回答1:

Using tlbimp.exe directly is not necessary. Try replacing any <COMReference> items in the project file with <COMFileReference>. An example would look like this:

<ItemGroup>
   <COMFileReference Include="MyComLibrary.dll">
     <EmbedInteropTypes>True</EmbedInteropTypes>
   </COMFileReference>
</ItemGroup>

The COM dll doesn't need to be registered on the machine for this to work.

Each COMFileReference item can also have a WrapperTool attribute but the default seems to work fine. The EmbedInteropTypes attribute is not documented as being applicable to COMFileReference, but it seems to work as intended.

See https://docs.microsoft.com/en-ca/visualstudio/msbuild/common-msbuild-project-items#comfilereference for a little more detail. This MSBuild item has been available since .NET 3.5.



回答2:

OK, the answer was more easy than one might think. Just use "tlbimp.exe" to create an according intrerop.dll which you include in your project and reference to this dll instead to the COM objects.

You may save the time using tlbimp.exe because Visual Studio creates this dll automatically when you reference a COM object. But it does not upload it to TFS. So finally I just used the automatically created dll and the TFS build Server was happy.

One may find the automatically created Interop dll in: "ProjectFolder\obj\x86\Development"