在库中使用 .Net Standard 1.4 和在应用程序中使用 .Net framework 4.6.1 时,无法加载文件 System.IO.FileSystem,Version=4.0.1.0
Posted
技术标签:
【中文标题】在库中使用 .Net Standard 1.4 和在应用程序中使用 .Net framework 4.6.1 时,无法加载文件 System.IO.FileSystem,Version=4.0.1.0【英文标题】:When using .Net Standard 1.4 in a library and .Net framework 4.6.1 in and application, unable to load file System.IO.FileSystem, Version=4.0.1.0 【发布时间】:2017-05-30 08:39:45 【问题描述】:我有一个包含一个库和 2 个应用程序的解决方案。这些应用程序代表相同的程序,其中一个通过 UAP10 针对 Windows App Store 构建,另一个针对使用 .Net Framework 4.6.1 的 Microsoft Windows PC 构建。我正在使用 Visual Studio 2017。
我将库项目目标设置为 .Net 标准 1.4。 我将 UWP 应用程序设置为面向 Windows 10 Aniversary Edition(10.0;Build 14393),最低版本 Windows 10(10.0;Build 10586)。 我将通用 Windows 应用程序设置为面向 .Net Framework 4.6.1。UWP 版本编译运行良好。
最初,.Net Framework 4.6.1 编译并运行。但是,当我从 System.IO 调用 File.Open 时,我收到以下错误消息:
System.IO.FileNotFoundException: '无法加载文件或程序集 'System.IO.FileSystem,版本=4.0.1.0,文化=中性, PublicKeyToken=b03f5f7f11d50a3a' 或其依赖项之一。这 系统找不到指定的文件。'
带有 File.Run 的代码块位于库代码 (.Net Standard 1.4) 中。我不确定是什么导致了问题。我认为我可以在引用 .Net Framework 4.6.1 的应用程序中使用 .Net Standard 1.4 库。
作为一种解决方法,我尝试在 .Net Framework 应用程序中安装 System.IO 的 Nuget 包。 System.IO 版本 4.0.1.0 甚至不是一个选项。有一个4.0.10版本,但是安装了这个Nuget包就不行了。
那么,如何在引用 .Net Standard 1.4 库中的 System.IO 代码的 .Net Framework 4.6.1 应用程序中正确引用 System.IO 操作?
【问题讨论】:
似乎an issue 的某些 .NET 程序集与其 .NET 标准库对应项之间的程序集版本不匹配。您可以尝试在那里询问是否有任何修复。 【参考方案1】:这通常发生在“经典”csproj 项目中,当引用的项目需要覆盖覆盖系统定义的类型但不存在正确设置的绑定重定向时。将所有包安装到 .net 框架应用程序时(例如 NETStandard.Library
或 NETStandard.Library.NETFramework
(对于即将推出的 .NET Standard 2.0)),这应该是自动完成的。
要强制生成绑定重定向,请将其添加到 .NET Framework 项目的 csproj 文件中(如果它是可执行项目,则第二个属性应该无关紧要,但不会造成影响):
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
【讨论】:
出于好奇......这是否也可以通过简单地使用配置文件中的 BindingRedirect 元素来解决? 是的,如果您知道所涉及的所有参考程序集和外观的程序集版本。但是,当 MSBuild 查看项目中的所有引用时,它已经为其ResolveAssemblyReferences
任务完成了这项工作,这只是使其将结果写入输出配置文件。以上是关于在库中使用 .Net Standard 1.4 和在应用程序中使用 .Net framework 4.6.1 时,无法加载文件 System.IO.FileSystem,Version=4.0.1.0的主要内容,如果未能解决你的问题,请参考以下文章
在库中使用 React 路由器 - 无法使用 useHistory()