【问题标题】:Postsharp not building in custom configuration via MSBuildPostsharp 未通过 MSBuild 构建自定义配置
【发布时间】:2017-06-28 19:18:41
【问题描述】:

我正在通过命令行在客户配置上运行 MSBuild(例如您在 Visual Studio 中看到的调试、发布,但我使用的是我自己的配置)。

MSBuild build.msbuild /p:Configuration=Dev ...blah  

C:\myproject\packages\PostSharp.4.3.9-alpha\tools\PostSharp.targets(422,5): 错误 MSB4036:未找到“GenerateBindingRedirects”任务。 检查以下内容: 1.) 项目文件中的任务名称是 与任务类的名称相同。 2.) 任务类是 “public”并实现 Microsoft.Build.Framework.ITask 接口。 3.) 任务在项目文件中正确声明,或者在位于 “C:\windows\Microsoft.NET\Framework64\v4.0.30319”目录。 [路径到 我的项目文件]

这通常可以正常工作,但是当我使用 postsharp 时,它会抛出一个错误,如您在上面看到的。当我将 /p:Configuration 中的 Dev 替换为 Debug 或 Release 时,它​​们工作正常。

我检查了 .csproj,Release 没有添加任何特别的东西,这不在我的开发配置中。 我应该怎么做才能解决这个问题?我尝试将 postsharp 包目录的内容复制到 bin\Dev 文件夹中,但仍然无法找到任务。

【问题讨论】:

  • 该错误可能表明 <UsingTask> 元素在配置之间的评估方式不同。我建议为有问题的项目区分预处理的 MSBuild 项目——也就是说,比较 msbuild /pp:debug.proj path\to\project.csproj /p:Configuration=Debugmsbuild /pp:Dev.proj path\to\project.csproj /p:Configuration=Dev 的输出
  • 我实际上无法运行它。我有工具集 12,它似乎不支持该 pp 标志。
  • 你知道这是一年前的 alpha 版本吗?您是否尝试过升级软件包?
  • @DanielBalas 你指的是 MSBuild 还是 Postsharp?
  • @arviman PostSharp

标签: c# msbuild postsharp


【解决方案1】:

我们刚刚遇到了同样的情况。从 PostSharp 2 升级到 6.0.33。 在构建发布配置时,我们的 Jenkins 构建失败并出现同样的错误。

@Mauro Picotti 的建议很有帮助,但是安装 Microsoft.Build.Tasks.Core 包对我们也不起作用,因为它需要 .NET 4.5+,而我们的目标是 .NET 4.0。 其他建议只是禁用绑定重定向,正如 Mauro 所说,这很危险。这可能会导致很难诊断出编译错误。

最终为我们工作的是告诉 Jenkins 使用新版本的 MS Build。我们从 VS 2013 或 VS 2017 调用 MS Build 而不是 MS Build 4.0,它似乎有 GenerateBindingRedirects 任务可用并且构建良好。

【讨论】:

    【解决方案2】:

    我在将 PostSharp 从 2.1.6 升级到 6.0.27 的 .NET 4.0 项目中遇到此错误,使用脚本启动 Release 构建时,MSBuild(版本 4.7.3056)突然停止工作。

    问题是由于在PostSharp.targets(在包目录中)中声明的任务GenerateBindingRedirects 在.csproj 中没有对应的<UsingTask TaskName="Microsoft.Build.Tasks.GenerateBindingRedirects"

    显然,“解决”的最快方法是在PostSharp.Custom.targets 中添加<PostSharpDisableDefaultBindingRedirects>True</PostSharpDisableDefaultBindingRedirects>,正如此处http://doc.postsharp.net/assembly-binding-resolution 所建议的那样。但根据项目的不同,这可能很危险。

    它对我不起作用,因为我的项目的 .NET 框架太旧了,但理论上解决方案可能是将包添加到项目中并在 .csproj 中声明 UsingTask 元素:

    Install-Package Microsoft.Build.Tasks.Core -Version 15.1.0
    
    <UsingTask TaskName="Microsoft.Build.Tasks.GenerateBindingRedirects" AssemblyName="Microsoft.Build.Tasks.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" Condition="'$(MSBuildAssemblyVersion)' != ''" />
    

    其他解决方法是删除在 PostSharp.targets 中声明的元素 GenerateBindingRedirects(将此文件添加到 git 跟踪的文件中),或者在有问题的项目的 .csproj 文件中添加对该元素的覆盖(类似这样):

    <Target Name="PostSharpGenerateBindingRedirects" DependsOnTargets="ResolveAssemblyReferences" Inputs="$(MSBuildAllProjects);@(AppConfigFile);$(ResolveAssemblyReferencesStateFile);$(IntermediateOutputPath)" Outputs="$(_DefaultPostSharpHostConfigurationFile)" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      相关资源
      最近更新 更多