代码之家  ›  专栏  ›  技术社区  ›  flyx

与NuGet绑定的本机dll的输出目录

  •  0
  • flyx  · 技术社区  · 6 年前

    我正在尝试构建一个NuGet包,其中包含本机dll,当项目使用该包时,这些dll将被放置在output文件夹中。我已经试着使用了 this question ,但我总是遇到同样的问题。

    我当前的NuGet包布局如下:

    \build
      packageId.targets
      file1.dll
      file2.dll
    \lib
      \netstandard1.4
        assembly.dll
    

    内容 packageId.targets

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ItemGroup>
        <NativeLibs Include="$(MSBuildThisFileDirectory)\*.dll"/>
        <None Include="@(NativeLibs)" Link="$(RecursiveDir)$(Filename)$(Extension)">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </None>
      </ItemGroup>
    </Project>
    

    根据其他问题的答案,这将导致我的DLL被放置在 bin\Debug 使用包的项目的目录。然而,他们不是。相反,它们被放置在 bin\Debug\packages\packageId\build .

    现在我做了很多实验,我注意到越来越多的奇怪的行为,我无法理解:

    • 如果我将dll移到NuGet包的根目录(就像一个答案所建议的那样)并更改 .targets 相应地归档,
    • 如果我改变主意 文件到 只有 参考 file1.dll 两者都有 Include= Link= ,两个文件都会被复制。
    • .目标 build 文件,DLL文件将不再被复制。

    现在我更不明白发生了什么。

    我需要更改什么才能将DLL复制到 bin\调试 ?

    1 回复  |  直到 6 年前
        1
  •  9
  •   Martin Ullrich    6 年前

    在NuGet中处理特定于运行时的同意的新方法是使用 runtimes

    \lib
      \netstandard2.0
        ManagedWrapper.dll
    \runtimes
      \win-x86
        \native 
         NativeThing.dll
      \win-x64
        \native 
         NativeThing.dll
      \linux-x64
        \native 
         libNativeThing.so
      \osx-x64
        \native 
         libNativeThing.dylib
    

    如果包是从.NET Framework项目中使用的,则可能需要添加对 Microsoft.NETCore.Platforms 包提供了运行时图( runtimes.json )如果您不使用基本RID(例如。 win10-x64 退回到 win-x64 资源)。