c# - 无法在引用 .Net 标准库的已发布 .Net 4.6.1 项目中加载文件或程序集 'System.ComponentModel.Annotations'

标签 c# .net .net-assembly .net-standard assembly-binding-redirect

请注意:这不是 Could not load file or assembly 'System.ComponentModel.Annotations, Version=4.1.0.0 的副本. 与链接的问题不同,此问题仅在 发布应用程序之后发生。正如您将在下面看到的,我已经尝试了该帖子中提出的所有解决方案,但都没有成功。

此问题发生在引用 .Net Standard 2.0 库的 WPF .Net Framework 4.6.1 项目中,该库本身引用 System.ComponentModel.Annotations NuGet 包。

此问题在以下项目中重现:https://github.com/kaitlynbrown/DataAnnotationsError

重现错误:

  1. 克隆上面链接的 repo
  2. 克隆上面链接的 repo
  3. 在 visual studio 中打开解决方案
  4. 在 Visual Studio 中,构建 -> 发布
  5. 点击完成
  6. 安装并运行已发布的应用程序

您将看到以下错误:

DataAnnotationError

我已经尝试了很多方法来解决这个问题,包括:

将以下行添加到 WPF 项目的 .csproj:

<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>

在 App.config 中添加以下绑定(bind)重定向:

<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 中构建和运行。我能够做到这一点而不会出错。尝试发布应用程序并随后运行已发布的应用程序时会出现问题。

最佳答案

Visual Studio 中有一个与 ClickOnce 发布相关的错误,发布逻辑似乎在试图变得聪明,并且“有帮助地”排除了它认为是框架一部分的 DLL。当然,这会在混合替换完整框架功能的 .NET Standard 包时导致各种问题。

引用:

我没有亲自尝试过 GitHub 问题中建议的解决方法,但在 System.Net.Http.dll 中遇到了类似的问题,该问题已通过显式添加从 NuGet 包到项目文件的 dll 链接解决(添加现有 > 显示所有文件 > 添加为链接)并设置“始终复制”。要清楚:我的意思是将 dll 添加为“内容”——而不是添加对 dll 的引用。链接的 DLL 将始终复制到发布输出。

关于c# - 无法在引用 .Net 标准库的已发布 .Net 4.6.1 项目中加载文件或程序集 'System.ComponentModel.Annotations',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47803812/

相关文章:

c# - 发布错误 : Could not load file or assembly 'Microsoft.Web.XmlTransform' , Version=1.4.0.0, Culture=neutral 等或其依赖项之一

c# - 在运行 T4 模板以在解决方案中包含程序集时确定解决方案配置(调试/发布)

c# - 有没有办法可以生成 CRM 中所有实体的列表以及它们是否打开了审核历史记录?

javascript - 如果数字为 1 或 0,则显示不同的图标 - ASP.NET C# MVC JQuery

c# - 允许退格按钮在经过验证的 TextBox 中工作

c# - 仅获取 Referrer 页面而不是 .NET 中的完整地址

c# - 引用的程序集 'GenCode128.dll' 不是有效的程序集

c# - RDLC 中的特定格式编号

c# - 从 Python 调用 C# 中的特定属性重载

.net - IIS 在不关闭 IIS 网站的情况下发布 ASP.NET Core 应用程序