读研的人字拖 · Java 读取 .properties ...· 2 周前 · |
睡不着的跑步鞋 · asp.net core mvc ...· 3 天前 · |
善良的高山 · 安徽淮北:濉溪老街焕发新活力-新华网· 1 年前 · |
孤独的大海 · sana创作的动画小红帽 - 百度· 1 年前 · |
健壮的日光灯 · 头文字D漫画风涂装, 这样的上色更有赛场的紧张感!· 1 年前 · |
玩足球的饭卡 · 学会这个技巧,闭着眼睛也能关掉 ...· 1 年前 · |
讲道义的米饭 · 电车指数|10月新能源物流车车型销量排行榜 ...· 1 年前 · |
我正在使用Visual Studio2017,并试图创建一个.Net标准1.5库,并在.Net 4.6.2 nUnit测试项目中使用它。
我收到以下错误...
无法加载文件或程序集“System.Runtime,Version=4.1.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。系统找不到指定的文件。
我尝试过以下几种方法:
这是一个bug吗?有什么变通办法吗?任何帮助都是非常感谢的。
当您从.NET 4.x项目引用.NET标准项目时会出现此问题:.NET标准项目的任何nuget包引用都不会作为依赖项引入。
要解决这个问题,您需要确保您的.NET 4.x csproj文件指向当前的构建工具(至少14个):
<Project ToolsVersion="15.0">...
在VS15.3版本中,不再需要 了:
在VS2017中有一个 known bug ,特别是在NuGet 4.0中。
要解决此错误,您需要打开.NET 4.x项目的.csproj文件并添加以下代码片段:
<ItemGroup>
<PackageReference Include="Legacy2CPSWorkaround" Version="1.0.0">
<PrivateAssets>All</PrivateAssets>
</PackageReference>
</ItemGroup>
VS4.x带来了“包参考”--不再有packages.config --但旧的4.x流水线在NuGet 2017发布时并没有完全更新。上面的代码片段似乎“唤醒”了构建系统,使其能够正确地包含依赖项中的包引用。
我在一个针对dotnet framework 4.6.2的NUnit 2.6.4项目中遇到了这个问题。我在尝试使用
Humanizer
时遇到了
System.Runtime FileNotFound
错误。
我通过在我的单元测试项目中安装 NetStandard.Library 修复了我的错误。
我通过在NUnit-Project中引用 NetStandard.Library 和下面的 app.config 文件解决了这个错误。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.InteropServices" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
编辑
如果缺少
System.Runtime
、
System.Reflection
或
System.Runtime.InteropServices
以外的任何内容(例如
System.Linq
),则只需添加一个新的
dependentAssembly
节点。
编辑2
在新的Visual Studio版本中(我认为是201715.8),Studio创建app.config文件是可能的。只需在 项目-属性-应用程序 中选中 自动生成绑定重定向应用程序复选框。
编辑3
自动生成绑定重定向不能很好地与.NET类库一起使用。向csproj文件添加以下行可以解决这个问题,并为类库生成一个有效的.config文件。
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
在我的.NET 4.6.1网站上,我有好几次都遇到了这种情况。每次当我添加对单独的.NET核心项目的引用时,我都会产生问题。在构建时,Visual Studio正确地提醒我此类跨框架引用是无效的,于是我迅速删除了项目引用。项目在那之后构建得很好,但在访问网站时出现了System.Runtime错误,并且拒绝离开。
每次修复都很差劲,但却很有效:我删除了项目目录,并从源代码管理部门重新下载了它。尽管之前和之后没有区别,但我能够构建项目并访问页面,没有任何抱怨。
我在VS201715.45中遇到了类似的问题-当我检查项目时发现,即使项目编译并运行,当我试图访问TPL数据流对象时,它也出现了关于System.Runtime的system.IO.FileNotFoundException。
当我检查解决方案中的项目时,其中一个(顶部的)缺少底层项目使用的System.Runtime包。一旦我从Nuget安装了它,一切都能正常工作。
我也有同样的问题,但我没有找到有效的建议解决方案。我对这个问题的解决方案是:检查App.config和packages.config,看看版本是否匹配。
最初我的app.config包含:
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>
但packages.config包含:
<package id="System.Runtime" version="4.3.0" targetFramework="net461" requireReinstallation="true" />
我修改了app.config条目以匹配newVersion的packages.config:
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.3.0" />
</dependentAssembly>
更改后,问题得到了解决。
我们发现
AutoGenerateBindingRedirects
可能是导致此问题的原因。
观察到:同一个针对
net45
和
netstandard1.5
的项目在一台机器上成功构建,但在另一台机器上构建失败。机器上安装了不同版本的框架(4.6.1 -成功和4.7.1 -失败)。在将第一台机器上的框架升级到4.7.1之后,构建也失败了。
Error Message:
System.IO.FileNotFoundException : Could not load file or assembly 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
----> System.IO.FileNotFoundException : Could not load file or assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
Auto binding redirects
是
.net 4.5.1
的一个特性。当nuget检测到项目正在过渡地引用同一程序集的不同版本时,它将自动在输出目录中生成配置文件,将所有版本重定向到所需的最高版本。
在我们的例子中,它将所有版本的
System.Runtime
重新绑定到
Version=4.1.0.0
。
.net 4.7.1
附带了运行时的
4.3.0.0
版本。因此,重定向绑定映射到当代版本的框架中不可用的版本。
该问题已通过禁用4.5目标的自动绑定重定向并仅为.net核心保留而得到修复。
<PropertyGroup Condition="'$(TargetFramework)' == 'net45'">
<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
</PropertyGroup>
我尝试了这里的所有解决方案,但都没有用。最后,我通过打开新的csproj文件并手动添加以下部分来解决这个问题:
<Reference Include="System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<HintPath>..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll</HintPath>
</Reference>
相信我,我不是在开玩笑。从你的app.config中移除所有的System.Runtime依赖项,它就会开始工作。
我通过删除我的
app.config
修复了这个问题
<assemblyIdentity name="System.Runtime" ....>
条目。
重构过程中自动添加(但不需要)
app.config
我使用的是ASP.Net Core2.1,当我从一个大型存储库的大约40个列表中选择一个.csproj运行时,我得到了这个错误。当我单独打开csproj文件时,错误被解决了。当打开csproj时,程序的启动方式有所不同。
在通过Nuget添加MsTest V2之后,刚刚在单元测试项目中遇到了这个问题。重命名app.config (因此有效地删除了它)为我做了这件事。
看了上面所有的帖子后,我仍然不知道为什么,对不起!
我最近遇到了这个问题,我尝试了很多在这个帖子和其他帖子中提到的东西。我通过nuget包管理器为
"System.Runtime"
添加了包引用,修复了
app.config
中的绑定声明,并确保
app.config
和
package.config
具有相同的程序集版本。然而,这个问题仍然存在。
最后,我删除了程序集的
<dependentAssembly>
标记,问题就出现了。因此,尝试删除
app.config
中的以下内容。
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.1.0" />
</dependentAssembly>
编辑:
在我将.NET框架更新到4.7.2之后,问题再次浮出水面。我尝试了上面的技巧,但没有起作用。在浪费了很多小时之后,我意识到这个问题是由于app.config中的一个旧的
System.Linq
引用造成的。因此,删除或更新所有Linq引用也可以解决此问题。
这个问题有很多原因...在我的例子中,问题是在我的
web.config
中添加了
System.Runtime
程序集的标记:
<assemblies>
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</assemblies>
但一个包也添加了与其他版本依赖的相同程序集:
<package id="System.Runtime" version="4.3.0" targetFramework="net47" />
从我的
web.config
中删除
<add assembly>
标签解决了问题。
我通过删除Nuget包
System.Runtime
然后重新安装修复了这个问题
当您从.NET 4.x项目引用.NET标准项目时会出现此问题:.NET标准项目的任何nuget包引用都不会作为依赖项引入。
我通过添加System.Runtime
4.3
和NETStandard.Library包和
解决了这个问题!!重要!!我使用重构工具查找
4.3
版本,它是System.Runtime.dll
4.1.1.1
.config
,然后在.config
中添加bindingRedirect
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="4.1.1.1" />
</dependentAssembly>
我通过从.NET 4.7.2 => .NET 4.5.2切换到472来解决这个问题。因此,在某些情况下,出现此错误是因为包管理器无法解析依赖项
善良的高山 · 安徽淮北:濉溪老街焕发新活力-新华网 1 年前 |
孤独的大海 · sana创作的动画小红帽 - 百度 1 年前 |
健壮的日光灯 · 头文字D漫画风涂装, 这样的上色更有赛场的紧张感! 1 年前 |