请注意:这不是 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
重现错误:
- 克隆上面链接的 repo
- 克隆上面链接的 repo
- 在 visual studio 中打开解决方案
- 在 Visual Studio 中,构建 -> 发布
- 点击完成
- 安装并运行已发布的应用程序
您将看到以下错误:
我已经尝试了很多方法来解决这个问题,包括:
将以下行添加到 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 包时导致各种问题。
引用:
- Issues with .NET Standard and Click Once (GitHub 上的点网/标准)
- ClickOnce Deployment of HttpClient Libraries (微软连接)
我没有亲自尝试过 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/