【问题标题】:Custom Tool Error: after switching project from .net 4.5 to .Net 4.6.1自定义工具错误:将项目从 .net 4.5 切换到 .Net 4.6.1 后
【发布时间】:2016-05-18 15:19:40
【问题描述】:

我已将我的项目从 .Net 4.5 升级到 .Net 4.6.1,现在尝试编译时出现以下错误:

“GenerateBindingRedirects”任务意外失败。 System.NullReferenceException:对象引用未设置为对象的实例。 在 Microsoft.Build.Tasks.GenerateBindingRedirects.UpdateExistingBindingRedirects(XElement runtimeNode,IDictionary`2 重定向) 在 Microsoft.Build.Tasks.GenerateBindingRedirects.Execute() 在 Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 在 Microsoft.Build.BackEnd.TaskBuilder.d__26.MoveNext()

自定义工具错误:无法生成文件:为 system.serviceModel/bindings 创建配置节处理程序时出错:参数不正确。 (HRESULT 异常:0x80070057 (E_INVALIDARG))(C:\ALM[BranchName]\Common[ProjectName]\app.config 第 48 行)Portal.Interface C:\ALM[BranchName]\Common[ProjectName]\Service References[ServiceName ]\Reference.svcmap

根据其他搜索,我尝试过: 删除应用配置中的 ServiceModel 部分并更新服务引用。 但这不起作用,因为我无法从我的机器访问服务。

我还确认服务引用配置为未选中“在引用的程序集中重用类型”。

一次搜索使我删除了 Reference.svcmap 中的一个条目,但没有具体说明应该删除哪些条目。

我对服务参考肯定不满意,因此我们将不胜感激。

【问题讨论】:

  • 嗯,“意外”是一个非常准确的描述。我怀疑你必须先告诉我们更多关于你的项目的信息,然后任何人才能制定关于 app.config 文件如何影响 MSBuild 的理论。
  • 如果您喜欢冒险,您可以查看source code 以了解您的项目文件可能有什么问题。有几件事可能会导致 NRE,但一种可能的可能性是,某些预期的 XML 属性在您的项目文件中没有出现在它们应该出现的位置。

标签: c# .net .net-4.5 service-reference .net-4.6.1


【解决方案1】:

违规行:

private void UpdateExistingBindingRedirects(XElement runtimeNode, IDictionary<AssemblyName, string> redirects)
{    
    ...
    var publicKeyToken = assemblyIdentity.Attribute("publicKeyToken");
    var publicKeyTokenValue = publicKeyToken.Value;
    ...

看起来您无法重定向非强名称的程序集。这意味着我应该能够删除条目。这确实让我想知道这在 .Net 4.5 之前是如何工作的

【讨论】:

  • 我最终删除了这些重定向,因为它们一开始就毫无用处。我与将它们放入其中的原始开发人员进行了交谈,他不记得自己为什么这样做了。
  • 检查 app.config 中的绑定。我有一些重复。删除这些后它再次起作用。
【解决方案2】:

指定publicKeyToken="null" 为我解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    相关资源
    最近更新 更多