如何创建一个nuget包以引用COM Imterop dll?

时间:2018-07-05 13:33:10

标签: nuget

我在获取nuget包以将COM interop DLL正确添加到我的项目时遇到麻烦。 nuget文档(尤其是关于COM互操作的部分)尚不清楚,所以我希望有人可以填补空白。

我正在使用Visual Studio 2017 Enterprise。

这是我的nuspec文件:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>MyInteropLibs</id>
        <version>1.0.1</version>
    <title>Does stuff</title>
        <authors>me</authors>
    <description>My COM Interop DLL</description>
    <summary>ditto</summary>
    <copyright>me</copyright>
  </metadata>
  <files>
    <file src="..\AxVCF150.DLL" target="lib" />
    <file src="..\VCF150.DLL" target="build" /> <!--the interop-->
    <file src="VCF150Interop.targets"/>
  </files>
</package>

这是我随附的Targets文件(VCF150Interop.targets):

  <Target Name="Unique.VCF150" AfterTargets="ResolveReferences" BeforeTargets="FindReferenceAssembliesForReferences">
  <PropertyGroup>
  <InteropAssemblyName>VCF150</InteropAssemblyName>
  </PropertyGroup>
  <ItemGroup>
    <ReferencePath Condition=" '%(FileName)' == '{InteropAssemblyName}' AND '%(ReferencePath.NuGetPackageId)' == '$(MSBuildThisFileName)' ">
      <EmbedInteropTypes>false</EmbedInteropTypes>
    </ReferencePath>
  </ItemGroup>
</Target>

据我所知,这正是文档所规定的内容,并且在检查时构建的软件包似乎在软件包中的正确位置具有正确的文件。但是,当我使用nuget软件包管理器将其安装在项目中时,仅添加AxVCF150.dll作为参考,而互操作dll被完全忽略。

我想念什么?

1 个答案:

答案 0 :(得分:1)

这听起来很荒谬。您是否尝试过更改DLL目标的名称? 例如:VCF150.DLL到interop.VCF150.DLL

  <files>
    <file src="..\AxVCF150.DLL" target="lib" />
    <file src="..\VCF150.DLL" target="interop.VCF150.DLL" /> <!--the interop-->
  </files>