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

时间:2017-12-13 23:46:14

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

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

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

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

重现错误:

  1. 克隆上面链接的回购
  2. 克隆上面链接的回购
  3. 在visual studio中打开解决方案
  4. 在Visual Studio中,构建 - >发布
  5. 点击完成
  6. 安装并运行已发布的应用程序
  7. 您将看到以下错误:

    DataAnnotationError

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

    将以下行添加到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中构建和运行。我能够毫无错误地做到这一点。尝试发布应用程序并随后运行已发布的应用程序时会出现此问题。

2 个答案:

答案 0 :(得分:3)

Visual Studio中与ClickOnce发布有关的错误似乎是发布逻辑试图变得聪明并且有助于#34;排除它认为是框架一部分的DLL。当然,这会在混合使用.NET标准软件包替换完整框架功能时导致各种问题。

参考:

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

答案 1 :(得分:0)

运行发布的应用程序版本后,我没有遇到错误。 enter image description here

但是我今天在我制作的一个应用程序中遇到了这个问题。问题是应用程序的调试运行良好,但单元测试因此错误而失败。我通过将.NET Framework版本从4.7增加到4.7.2,并将AutoGenerateBindingRedirects,GenerateBindingRedirectsOutputType设置为true来解决此问题,如您所提到的。测试也可以在4.8上正常工作。