NuGet软件包:将DLL复制到buildoutput中的子目录

时间:2020-03-10 15:39:23

标签: nuget

我想创建一个NuGet包,将DLL复制到输出目录的子目录中。

这是我包裹的文件夹结构:

  • 包根
    • lib
      • net48
        • x64
          • First.dll
          • Second.dll
        • x86
          • First.dll
          • Second.dll

应将DLL复制到输出文件夹中的相应子目录,如下所示:

  • 输出目录
    • x64
      • First.dll
      • Second.dll
    • x86
      • First.dll
      • Second.dll

我尝试了nuspec文件中的files属性:

<files>    
  <file src="lib\net48\amd64\*.dll" target="amd64\" />
  <file src="lib\net48\x86\*.dll" target="x86\" />
</files>

构建程序包时,我使用的每个DLL都会出现以下警告:

警告:NU5100:程序集“ amd64 \ First.dll”不在内部 'lib'文件夹,因此当 软件包已安装到项目中。如果需要,将其移至“ lib”文件夹 它需要被引用。

还原所有软件包后,既不会创建子文件夹,也不会将D​​LL复制到输出文件夹中。

如何配置nuspec文件,以便将DLL复制到子文件夹中?我需要install.ps1脚本吗?

1 个答案:

答案 0 :(得分:0)

我正在使用 .NET Core(和.NET 5)项目。并将一个组件与多个项目DLL打包在一起。可以通过修改对象文件来做到这一点。

因此,如果您也有.NET Core项目,请将以下部分添加到.csproj文件中(应包装的项目中)以打包DLL,根据需要更改DLL名称和路径。

<ItemGroup>
  <_PackageFiles Include="$(OutputPath)\First.dll">
    <BuildAction>None</BuildAction>
    <PackagePath>x64</PackagePath>
  </_PackageFiles>
  <_PackageFiles Include="$(OutputPath)\First.dll">
    <BuildAction>None</BuildAction>
    <PackagePath>x86</PackagePath>
  </_PackageFiles>
</ItemGroup>