“EnsureBindingRedirects”任务意外失败。

47

当我使用vs2012创建新的ASP.NET 4.5 Web Forms 应用程序并更新所有的NuGet 包时,在构建过程中会收到以下错误:

错误 1 “EnsureBindingRedirects” 任务意外失败。 System.NullReferenceException: 引用对象未设置为对象的实例。 at Roxel.BuildTasks.EnsureBindingRedirects.MergeBindingRedirectsFromElements(IEnumerable`1 dependentAssemblies) at Roxel.BuildTasks.EnsureBindingRedirects.Execute() at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() at Microsoft.Build.BackEnd.TaskBuilder.d__20.MoveNext()

14个回答

66

这是一个 Microsoft.Bcl.Build 中的错误,为了解决它,您需要在 web.configapp.configassemblyIdentity 部分中添加 culture 信息。

例如,如果您有以下内容:

<dependentAssembly>
   <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
   <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>

将其更改为:

<dependentAssembly>
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>

1
web.config 中没有任何地方写有以下程序相关的代码:<dependentAssembly> <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> </dependentAssembly> - Ivan Lewis
9
System.Web.Helpers只是一个例子,请查找dependentAssembly,并且在该元素内的所有内容中添加CultureInfo。 - Henrik Fransas
2
谢谢!这很有帮助!但是culture="neutral"是什么意思? - Red2678
3
中性文化是指代表普遍语言如英语或西班牙语以及特定语言和地区的文化。 - Henrik Fransas

18

我遇到了类似但稍有不同的错误,花了我45分钟才弄清楚,所以觉得最好把它发出来。

我的问题是 "EnsureBindingRedirects" task failed unexpectedly ,但是我的问题来源于一个 XmlException:

(...)\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets(97,5): error MSB4018: System.Xml.XmlException: '=' 是意外的符号。期望的符号是 ';'。第39行,第175位置。

结果发现,原因是我最近在web.config的 appSettings 中添加了一个条目,其中 value 是包含“&”的URL。

在XML中,甚至在属性值中也需要转义“&”。

我将URL值中的所有 & 改为 &amp; ,然后就可以构建成功了。


1
这也是我的问题,这样一个神秘的错误,不过你节省了我很多时间,谢谢! - Norrec
不错的发现 JHo - 为我省了很多压力。 - Bern
在我的情况下,我在一个“value”属性中有一个“<”和一个“>”。 - Mjaustro

15
在我的情况下,问题是在我合并一个分支之后出现的,这个分支破坏了我的web.config文件。它添加了注释字符序列<!--,但没有关闭部分-->
使文件标记有效修复了这个问题。

谢谢!这也是问题的原因。如果没有你的评论,我可能不会发现它,因为错误出现在Web.config文件中,而不是我认为它所指的*.csproj文件中。每天都有新的东西可以学习 ;) - user2890488
1
我也遇到了一个损坏的web.config文件。修复后,项目编译通过了。 - pat capozzi

10

更新Microsoft.Bcl.Build来解决此问题。

在Package Manager控制台上运行以下命令:

Update-Package Microsoft.Bcl.Build

3

通常是 Microsoft.Bcl.Build 失败。在我的情况下,这是在合并后,Git 将无效数据添加到我的 web.config 文件中。只需打开 web.config 文件并检查是否有以下行:

  • <<<<<<< HEAD
  • =======
  • >>>>>>> dev

删除它们。


1
一份新的 Microsoft.Bcl.Build 版本(1.0.6)已经发布到 NuGet.org,以解决这个问题。将区域设置添加到 assemblyIdentity 的解决方法不再必要,但如果您保留它,也不会有任何问题。

5
2天之前我尝试过,但它仍然出问题了。不知道这个新的软件包在哪个平行宇宙里! :) - Mrchief

1
以下步骤可用于解决问题:
  1. "Microsoft.Bcl.Build"包更新到最新版本。
  2. 确保您的项目下有一个App.config/Web.config文件,并且它在您的计算机上的相关文件夹中也存在。
  3. 确保App.config/Web.config文件中没有特殊字符。如果存在,则需要替换它们。请参考此文章 -> https://support.crossref.org/hc/en-us/articles/215652783-Special-characters-in-your-XML
  4. 在每个<dependentAssembly>下的App.config/Web.config文件中,添加以下键值对:culture="neutral"<assemblyIdentity ... />
  5. 另一个描述如何修复您独特情况的步骤,未在上述步骤中描述 :)
我希望这能帮到您。

0
I resolved this by following these steps:

1.) 从solution\packages中删除Microsoft.Bcl.Build.1.0.13。
2.) 关闭解决方案后,再打开解决方案。
3.) 导航到tools/Nuget包管理器。
4.) 在窗口右上角按下还原包,之后重新构建解决方案。

0

您已经添加了一个引用文件,但实际上该文件并不存在于您的解决方案文件夹中。


0
这种情况是因为我把BIN和OBJ文件夹标记为只读。需要在*.dll.config和*.app.config上移除只读属性,或者删除这些文件夹。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接