我有一个.Net Framework 4.6.1
WPF
项目,该项目引用了多个.Net Standard 2.0
程序集。这些程序集中的每一个都有自己的一个或两个依赖项,从NuGet引入。
在Visual Studio内部,一切正常并且运行正常。但是,当我第一次尝试发布应用程序并运行它(在同一台机器上)时,我得到了这个令人讨厌的异常:
无法加载文件或程序集System.Runtime,Version = 4.1.2.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其中一个依赖项。系统找不到指定的文件。
经过几天拉头发后,我终于发现将以下绑定重定向添加到我项目的App.config中解决了问题
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
至少,它将问题移到了System.ObjectModel
。然后在我添加了绑定重定向后,我收到了System.Collections
的错误,依此类推......不久之后,我的App.config看起来像这样:
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.ObjectModel" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Collections" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Reflection.Extensions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Linq" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Globalization" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Collections.Concurrent" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Requests" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Text.RegularExpressions" 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.Extensions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.WebHeaderCollection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
</dependentAssembly>
最近,我将ServiceStack.Client.Core
NuGet包添加到我的一个.Net Standard
程序集中,并添加了一些调用Web服务的代码。同样,Visual Studio中的一切都很好用,但是当我去发布应用程序然后运行时,每当应用程序试图调用我的Web服务时,我就会再次看到这些错误。我开始添加绑定重定向,直到我遇到一个看起来需要两个不同版本的程序集:
无法加载文件或程序集“System.IO.Compression,Version = 4.2.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089&#39;或其中一个依赖项。系统找不到指定的文件
具有以下内部异常:
无法加载文件或程序集“System.IO.Compression,Version = 4.1.1.0,Culture = neutral,PublicKeyToken = b77a5c561934e089&#39;或其中一个依赖项。系统找不到指定的文件
如果我尝试为4.2.0.0
添加绑定重定向,则外部异常消失,但我仍然看到4.1.1.0
的异常。我尝试过几乎我能想到的每种方式为4.1.1.0
添加第二个绑定重定向(重定向到4.1.1.0
,重定向到4.2.0.0
,在<dependentAssembly>
中<dependentAssembly>
}标签,在其自己的4.1.1.0
标签中,只有<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
重定向...但无论我做什么,内部异常仍然存在。是的,在你问之前,我知道publicKeyToken这个集会与其他集会不同。
作为补充说明,我发现了一些StackOverflow帖子,其中提到将<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
和/或PackageReference
添加到我的.csproj将解决这些问题。我试过这个,但它绝对没有任何意义。此外,我的所有项目都使用packages.config
和不 System.IO.Compression
所以,我有两个问题:
4.2.0.0
4.1.1.0
/ .Net Standard
依赖问题?System.X
库之一,我都会遇到一堆运行时错误,除非我为每一个struct GlobalData {
var email: String? = nil
}
var globalData = GlobalData()
依赖项手动添加绑定重定向NuGet包。答案 0 :(得分:0)
我遇到了类似的事情。虽然这是旧帖子,但这有助于我的Azure服务结构集群绑定问题:
<PackageOutputFolder> true </PackageOutputFolder>
。
摘自this post。