c# – 无法在已发布的.Net 4.6.1项目引用.Net标准库中加载文件或程序集“System.ComponentModel.Annotations”
作者:互联网
请注意:这不是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
要重现错误:
>克隆上面链接的repo
>克隆上面链接的repo
>在visual studio中打开解决方案
>在Visual Studio中,Build – >发布
>单击“完成”
>安装并运行已发布的应用程序
您将看到以下错误:
我已经尝试了很多方法来解决这个问题,包括:
将以下行添加到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中构建和运行.我能够毫无错误地做到这一点.尝试发布应用程序并随后运行已发布的应用程序时,会出现此问题.
解决方法:
Visual Studio中有一个与ClickOnce发布有关的错误,似乎发布逻辑试图变得聪明并且“帮助”排除它认为是框架一部分的DLL.当然,这会在混合使用.NET标准软件包替换完整框架功能时导致各种问题.
参考:
> Issues with .NET Standard and Click Once(GitHub上的dotnet /标准)
> ClickOnce Deployment of HttpClient Libraries(Microsoft Connect)
我没有亲自尝试过GitHub问题中建议的解决方法,但是System.Net.Http.dll也遇到了类似的问题,该问题通过显式添加从NuGet包到项目文件的dll链接得到解决(Add Existing> ;显示所有文件>添加为链接)并设置“始终复制”.要明确:我的意思是将dll添加为“内容” – 不添加对dll的引用.链接的DLL将始终复制到发布输出.
标签:c,net,net-assembly,net-standard,assembly-binding-redirect 来源: https://codeday.me/bug/20190627/1305434.html