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

MSBuild不复制低于依赖要求的无签名DLL是否为设计特性?

问题场景
  • 所有涉及的DLL均为无签名版本
  • 解决方案内所有项目都依赖1.0.21221.1版本的Shared.dll
  • 解决方案内部分项目的某些NuGet依赖,依赖同个DLL的1.0.21237.1版本
  • 构建名为Api的Web应用时,预期会将$(OutDir)下的1.0.21221.1版本Shared.dll复制到$(OutDir)_PublishedWebsites\Api\bin目录
  • 实际Shared.dll未被复制,导致Web应用无法运行
二进制日志证据

证据A - 版本冲突

版本冲突截图

证据B - ResolveAssemblyReference指令禁止复制Shared.dll

RAR指令截图

核心疑问

我理解MSBuild会对版本冲突做处理,但完全不复制该DLL会导致应用启动失败,属于严重问题。我知道可以通过添加程序集绑定重定向解决,但我一直以为无签名程序集不需要绑定重定向,是我的理解有误还是有其他遗漏的配置?


编辑1(评论区问题回复)

(部分关键词因要求做了脱敏处理)

  • Api项目具体如何引用Shared.dll?
    如证据B所示,Shared.dll是Api的传递依赖:Api通过如下方式引用Xyz.BusinessApi:
    <Reference Include="Xyz.BusinessAPI" />
    
    该DLL通过对应NuGet依赖依赖Shared.dll,以下是Xyz.BusinessAPI的project.assets.json文件片段:
    project.assets.json片段截图
  • 其他项目如何引用Shared.dll?
    大量项目以1.0.21221.1版本的NuGet包形式引用Shared.dll,问题在于部分项目还引用了另外两个NuGet包,这两个包依赖同个NuGet包的1.0.21237.1版本,该信息可在证据A的RAR输出中看到。
    需强调:没有项目直接以原始DLL形式引用Shared.dll,仅通过NuGet包、其他NuGet/项目的间接依赖、或项目DLL引用。项目DLL指其他解决方案提前构建的项目输出DLL,我们不允许跨解决方案添加项目引用,因此其他解决方案构建的项目会以DLL形式被后续解决方案引用。
  • 从OutDir复制文件到_PublishedWebsites\api\bin使用的是什么机制?
    使用的是标准Web应用发布目标_CopyFilesMarkedCopyLocal,来自路径C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets:
    <!-- copy any referenced assemblies to _PublishedWebsites\app\bin folder -->
    <Copy SourceFiles="@(ReferenceCopyLocalPaths)"
          DestinationFiles="@(ReferenceCopyLocalPaths->'$(WebProjectOutputDir)\bin\%(DestinationSubDirectory)%(Filename)%(Extension)')"
          SkipUnchangedFiles="true"
          Retries="$(CopyRetryCount)"
          RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"/>
    
  • Shared.dll是如何输出到OutDir的?
    我们所有代码都构建到共享bin目录,所有项目的OutDir配置为同一值,因此所有项目二进制文件及其依赖(包括Shared.dll)都会先输出到该目录。
  • binlog中是否存在双写记录?
    存在,但我认为该记录和当前问题无关:
    双写记录截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:45:03