NuGet:防止从 NuGet 子目录到 OutputPath 的复制操作

NuGet: Prevent copy operation from NuGet subdirectory flat to OutputPath

我创建了一个 NuGet 包,其中包含两个子文件夹(amd64 和 x86)中的本机库。 NativeLibraries 应该被复制到 OutputPath 的子文件夹中,这是可行的。我使用以下 Whosebug 条目作为创建包的指南:

NuGet 包文件夹结构如下所示:

我的目标文件如下所示:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <NativeLibs Include="$(MSBuildThisFileDirectory)**\*.dll" />
    <None Include="@(NativeLibs)">
      <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

但是,另外,在构建步骤中,文件会被复制到输出路径中(msbuild.exe,VS 2019)。由于amd64和x86文件夹中的文件同名,所以会互相覆盖。

关键的构建输出如下所示:

Copying file from "C:\Users\USERNAME\.nuget\packages\PACKAGENAME.2.3\build\amd64\DLL1.dll" to "C:\Bin\amd64\DLL1.dll".
Copying file from "C:\Users\USERNAME\.nuget\packages\PACKAGENAME.2.3\build\amd64\DLL2.dll" to "C:\Bin\amd64\DLL2.dll".
Copying file from "C:\Users\USERNAME\.nuget\packages\PACKAGENAME.2.3\build\x86\DLL1.dll" to "C:\Bin\x86\DLL1.dll".
Copying file from "C:\Users\USERNAME\.nuget\packages\PACKAGENAME.2.3\build\x86\DLL2.dll" to "C:\Bin\x86\DLL2.dll".
Copying file from "C:\Users\USERNAME\.nuget\packages\PACKAGENAME.2.3\build\amd64\DLL1.dll" to "C:\Bin\DLL1.dll".
Copying file from "C:\Users\USERNAME\.nuget\packages\PACKAGENAME.2.3\build\amd64\DLL2.dll" to "C:\Bin\DLL2.dll".
Copying file from "C:\Users\USERNAME\.nuget\packages\PACKAGENAME.2.3\build\x86\DLL1.dll" to "C:\Bin\DLL1.dll".
Copying file from "C:\Users\USERNAME\.nuget\packages\PACKAGENAME.2.3\build\x86\DLL2.dll" to "C:\Bin\DLL2.dll".

如何防止 NativeLibraries 被额外复制到 Output 文件夹?

我根据您的指南创建了这样的 nuget 包,但没有得到与您显示的相同的行为。

这是我的 nupkg:

不确定您的全局缓存下是否有旧缓存。

请试试这些:

假设你使用的是非sdk项目.net framework项目

1)先卸载你项目下的nuget包

2) clean nuget caches 或删除C:\Users\xxx\.nuget\packages\PACKAGENAME

下的所有文件

,删除<solution_folder>\packages\PACKAGENAME.1.2.3文件夹

3)重新安装新版本的nuget包。

此外,请检查您的 packagename.targets 文件是否有其他节点影响它。