You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Standard 2.0项目NuGet依赖项未复制到输出目录如何解决

核心问题原因

该问题是.NET Standard类库的传递依赖默认不会被启动项目的编译系统自动复制到输出目录导致的,混合.NET Framework和.NET 5+的项目架构下该问题更容易触发,可通过以下方案修复:


方案1:启动项目同步安装NuGet包

不要仅在.NET Standard类库中安装System.Security.Cryptography.ProtectedData包,需要给最终运行的启动项目(无论是.NET Framework旧项目还是.NET 5+新项目) 也单独安装同版本的该NuGet包,这是优先级最高的修复方案。

方案2:手动强制标记程序集复制到输出目录

如果安装包后仍未生成对应DLL,可手动修改引用配置:

  • 针对使用packages.config管理依赖的.NET Framework项目:
    在项目的引用列表中找到System.Security.Cryptography.ProtectedData,右键选择「属性」,将复制本地选项设置为True
  • 针对SDK风格项目(.NET Standard/.NET 5+):
    编辑项目的.csproj文件,给对应PackageReference节点添加PrivateAssets="none"属性,示例配置:
    <PackageReference Include="System.Security.Cryptography.ProtectedData" Version="6.0.0">
      <PrivateAssets>none</PrivateAssets>
    </PackageReference>
    
    该属性会明确告知编译器,该包的程序集需要作为公开依赖复制到输出目录。

方案3:修复.NET Framework项目的绑定重定向

如果是.NET Framework启动项目报版本不匹配错误,可强制生成绑定重定向规则:
右键.NET Framework项目选择「属性」,进入「应用」标签页,勾选自动生成绑定重定向选项,重新编译后会自动在App.config中生成对应版本的重定向规则,解决版本匹配问题。

方案4(兜底方案):生成后事件强制复制

如果上述方案都无效,可在.NET Standard类库的属性→生成事件→生成后事件命令行中添加以下命令:

xcopy /y $(NuGetPackageRoot)system.security.cryptography.protecteddata\6.0.0\lib\netstandard2.0\System.Security.Cryptography.ProtectedData.dll $(TargetDir)

编译时会自动将对应DLL复制到输出目录。


内容的提问来源于stack exchange,提问作者Master_T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:06:04