NuGet:防止从 NuGet 子目录到 OutputPath 的复制操作
NuGet: Prevent copy operation from NuGet subdirectory flat to OutputPath
我创建了一个 NuGet 包,其中包含两个子文件夹(amd64 和 x86)中的本机库。 NativeLibraries 应该被复制到 OutputPath 的子文件夹中,这是可行的。我使用以下 Whosebug 条目作为创建包的指南:
NuGet 包文件夹结构如下所示:
- 构建
- amd64
- DLL1.dll
- DLL2.dll
- x86
- DLL1.dll
- DLL2.dll
- packagename.targets
我的目标文件如下所示:
<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
文件是否有其他节点影响它。
我创建了一个 NuGet 包,其中包含两个子文件夹(amd64 和 x86)中的本机库。 NativeLibraries 应该被复制到 OutputPath 的子文件夹中,这是可行的。我使用以下 Whosebug 条目作为创建包的指南:
NuGet 包文件夹结构如下所示:
- 构建
- amd64
- DLL1.dll
- DLL2.dll
- x86
- DLL1.dll
- DLL2.dll
- packagename.targets
- amd64
我的目标文件如下所示:
<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
文件是否有其他节点影响它。