【问题标题】:How do I create a nuget package to reference a COM Imterop dll?如何创建一个 nuget 包来引用 COM Imterop dll?
【发布时间】:2018-12-14 00:26:23
【问题描述】:

我无法让 nuget 包正确地将 COM 互操作 DLL 添加到我的项目中。 nuget 文档(尤其是关于 COM 互操作的部分)有点不清楚,所以我希望有人能填补空白。

我正在使用 Visual Studio 2017 企业版。

这是我的 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。

我错过了什么?

【问题讨论】:

    标签: nuget


    【解决方案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>
    

    【讨论】:

    • 谢谢。我现在退休了,所以与我不再相关,但感谢您不厌其烦地回答。
    猜你喜欢
    • 2019-10-11
    • 1970-01-01
    • 2017-09-02
    • 2021-05-29
    • 2021-04-02
    • 1970-01-01
    • 2012-05-17
    • 2011-04-18
    • 1970-01-01
    相关资源
    最近更新 更多