【发布时间】:2017-12-13 23:46:13
【问题描述】:
请注意:这不是与Could not load file or assembly 'System.ComponentModel.Annotations, Version=4.1.0.0 的重复。 与链接的问题不同,此问题仅在发布应用程序后 发生。正如您将在下面看到的,我已经尝试了该帖子中提出的所有解决方案,但均未成功。
此问题发生在 WPF .Net Framework 4.6.1 项目中,该项目引用了本身引用 System.ComponentModel.Annotations NuGet 包的 .Net Standard 2.0 库。
该问题在以下项目中重现:https://github.com/kaitlynbrown/DataAnnotationsError
重现错误:
- 克隆上面链接的仓库
- 克隆上面链接的仓库
- 在 Visual Studio 中打开解决方案
- 在 Visual Studio 中,构建 -> 发布
- 点击完成
- 安装并运行已发布的应用程序
您将看到以下错误:
我已经尝试了很多方法来解决这个问题,包括:
将以下行添加到 WPF 项目的 .csproj:
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
在 App.config 中添加以下绑定重定向:
<runtime>
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/>
</dependentAssembly>
</runtime>
在 WPF 项目中添加对 System.ComponentModel.Annotations NuGet 包的引用
这些都不起作用。
请注意:问题在于不是在 Visual Studio 中构建和运行。我能够做到这一点而不会出错。尝试发布应用程序并随后运行已发布的应用程序时会出现此问题。
【问题讨论】:
-
在你项目的 bin 文件夹中是否有来自其他项目的 dll?如果是这样放在发布文件夹中。还可以尝试使用与任何 PC 兼容的 x86 选项进行构建。
-
在我的实际项目中,
System.ComponentModel.Annotations是唯一一个其 dll 未复制到发布文件夹的 NuGet 包。它确实出现在 bin 文件夹中(以及我的其他项目的 dll 和所有 NuGet 包引用),并且所有其他 dll 似乎都被复制到了发布文件夹中,除了这个。 -
用记事本打开.proj文件,检查是否有任何特殊说明可以复制工作的dll。
-
只有我添加的驱动我连接的硬件的 dll。出于某种原因,除了 System.ComponentModel.Annotations 之外,NuGet 包及其依赖项都会自动复制(应该如此)
-
我想知道这些指令在哪里复制 dll。它必须在当前项目或 2.0 库中。 2.0 项目可能没有在说明中包含 dll,这就是它没有复制的原因。网络库也无法识别较旧的 dll,并且不会获得副本。我对 Net 无法识别的旧 dll 有类似的问题。要使用 dll,我有一个从 c# 调用的 c++ 包装器 dll。我必须手动将原始脚本移动到 bin 文件夹进行编译。我从不费心提出移动这个 dll 的指令。
标签: c# .net .net-assembly .net-standard assembly-binding-redirect