如何强制Nuget包引用的dll复制到项目输出目录?
方案1:添加无意义代码引用(操作最简单)
在项目任意类(比如Azure Function入口类)中添加一行对System.Memory类型的显式引用,编译器会识别到依赖,自动保留dll复制逻辑:
// 仅声明即可,不需要主动调用 private static readonly Type _forceReference = typeof(System.Span<>);
方案2:修改项目文件强制复制(无需改动业务代码)
右键项目选择「编辑项目文件」,做两处修改:
- 调整System.Memory的包引用配置,开启路径属性生成:
<PackageReference Include="System.Memory" Version="你实际使用的包版本"> <IncludeAssets>all</IncludeAssets> <GeneratePathProperty>True</GeneratePathProperty> </PackageReference>
- 在项目文件末尾
</Project>标签前添加构建后复制任务,强制将dll拷贝到输出目录:
<Target Name="ForceCopySystemMemoryDll" AfterTargets="Build"> <!-- 复制到本地构建输出目录 --> <Copy SourceFiles="$(PkgSystem_Memory)\lib\net461\System.Memory.dll" DestinationFolder="$(OutputPath)" SkipUnchangedFiles="True" /> <!-- 发布时同步复制到发布目录,不需要可以删除本行 --> <Copy SourceFiles="$(PkgSystem_Memory)\lib\net461\System.Memory.dll" DestinationFolder="$(PublishDir)" SkipUnchangedFiles="True" Condition="Exists('$(PublishDir)')" /> </Target>
注:如果你的System.Memory包版本对应.NET Framework的适配目录不是net461,可以替换为实际存在的目录名
方案3:全局开启所有Nuget包复制本地(适合多依赖缺失场景)
如果项目中不止System.Memory一个包存在引用不复制的问题,可以在项目文件的第一个<PropertyGroup>节点中添加如下配置,强制所有PackageReference引入的dll都复制到输出:
<CopyLocalLockFileAssemblies>True</CopyLocalLockFileAssemblies>
内容的提问来源于stack exchange,提问作者MatterOfFact
相关产品推荐
相关产品推荐

