我正在通过命令行在客户配置上运行MSBuild(比如在Visual Studio中看到的Debug,Release,除了我使用自己的配置)。
MSBuild build.msbuild /p:Configuration=Dev ...blah
C:\ MyProject的\包\ PostSharp.4.3.9-α\工具\ PostSharp.targets(422,5): 错误MSB4036:找不到“GenerateBindingRedirects”任务。 检查以下内容:1。)项目文件中的任务名称是 与任务类的名称相同。 2.)任务类是 “public”并实现Microsoft.Build.Framework.ITask接口。 3.)在项目文件中或在位于的。* .tasks文件中正确声明任务 “C:\ windows \ Microsoft.NET \ Frame work64 \ v4.0.30319”目录。 [路径 我的项目文件]
这通常可以正常工作,但是当我有postharp时,它会抛出一个错误,如上所示。当我使用Debug或Release替换/ p:Configuration中的Dev时,它们工作正常。
我检查了.csproj并没有添加任何特殊内容,而不是我的开发配置。 我该怎么做才能解决这个问题?我尝试将postsharp软件包目录的内容复制到bin \ Dev文件夹中,但它仍然无法找到任务。
答案 0 :(得分:1)
我在将PostSharp从2.1.6升级到6.0.27的.NET 4.0项目中遇到此错误,使用脚本突然启动MSBuild(版本4.7.3056)启动了Release版本。
问题是由于在GenerateBindingRedirects
内部(在软件包目录中)声明的任务PostSharp.targets
在.csproj内部没有相应的<UsingTask TaskName="Microsoft.Build.Tasks.GenerateBindingRedirects"
。
显然,“解决”最快的方法是在<PostSharpDisableDefaultBindingRedirects>True</PostSharpDisableDefaultBindingRedirects>
内添加PostSharp.Custom.targets
,如此处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)' != ''" />
其他解决方法是删除在GenerateBindingRedirects
内部声明的元素PostSharp.targets
(将此文件添加到git跟踪的文件中),或在项目的.csproj文件中添加该元素的替代项,其中有问题(类似这样):
<Target Name="PostSharpGenerateBindingRedirects" DependsOnTargets="ResolveAssemblyReferences" Inputs="$(MSBuildAllProjects);@(AppConfigFile);$(ResolveAssemblyReferencesStateFile);$(IntermediateOutputPath)" Outputs="$(_DefaultPostSharpHostConfigurationFile)" />
答案 1 :(得分:0)
我们只是遇到了同样的情况。从PostSharp 2升级到6.0.33。 构建发布配置时,我们的Jenkins构建失败,并出现相同的错误。
@Mauro Picotti的建议很有帮助,但是安装Microsoft.Build.Tasks.Core软件包对我们而言也不起作用,因为它需要.NET 4.5+,而我们的目标是.NET 4.0。 其他建议只是禁用绑定重定向,这很危险,正如Mauro所说。这可能会导致很难诊断编译错误。
最终对我们有用的是告诉Jenkins使用新版本的MS Build。而不是MS Build 4.0,我们从VS 2013或VS 2017调用MS Build,它似乎具有GenerateBindingRedirects任务可用并且构建良好。