ClickOnce发布时未推送更新后的NuGet包版本问题求助
问题排查与解决方案
旧版本文件的常见来源
- 主项目(MainAppProject)仅通过类库(LibraryProject)间接引用NLog,MSBuild的依赖解析规则在存在版本歧义时优先拉取了显式声明的旧版本
- 项目配置文件(App.config/Web.config)中存在写死的旧版本绑定重定向规则,强制使用了4.7.10版本
- 发布目标目录未开启发布前清空逻辑,旧版本文件残留未被覆盖
- 系统全局程序集缓存(GAC)中安装了旧版NLog,发布时优先级高于本地NuGet源的包
- 发布配置文件存在历史缓存,或者根目录的
Directory.Build.props等全局配置文件中强制指定了NLog的旧版本号 - 主项目中存在手动添加的旧版NLog本地dll引用,优先级高于类库传递的NuGet引用
需要检查的遗漏配置
- 直接在主项目中安装和类库同版本的NLog NuGet包,消除间接依赖的版本解析歧义
- 打开所有项目的App.config/Web.config文件,找到NLog对应的
<dependentAssembly>节点,要么将newVersion属性改为你使用的5.0.0-preview.1,要么直接删除该节点让VS自动生成正确的绑定重定向 - 打开发布配置的「设置」页,在「文件发布选项」下勾选「删除目标目录中的现有文件」,避免旧文件残留
- 检查两个项目的NLog引用路径,确认均指向
C:\Users\dev\.nuget\packages\nlog\5.0.0-preview.1\路径下的dll,没有手动引用其他位置的旧版dll - 若你使用
packages.config管理NuGet包,建议迁移到PackageReference格式,packages.config的依赖解析逻辑更容易出现版本漂移问题 - 删除
Properties\PublishProfiles目录下的旧发布配置文件,重新创建新的发布配置,排除旧配置的缓存影响
调试方法与详细构建日志开启步骤
你可以通过开启诊断级构建日志,精准定位旧版本文件的复制来源,操作如下:
- 打开Visual Studio顶部菜单栏的「工具」→「选项」
- 找到「项目和解决方案」→「生成并运行」分类
- 将「MSBuild项目生成输出详细程度」的两个下拉选项,都修改为「诊断」(该级别日志信息最完整)
- 保存设置后重新触发发布操作
- 在输出窗口的构建日志中搜索
NLog.dll,找到「复制文件到发布目录」对应的步骤,查看该步骤的来源路径,即可明确旧版本文件的实际来源
内容的提问来源于stack exchange,提问作者grasbueschel
相关产品推荐
相关产品推荐

