我想使用MSBuild API自动化我的构建,但它给了我一个错误。我在Visual Studio 2015中有自动化项目。它引用了MSBuild v12.0 dll。
我正在使用代码来构建解决方案:
private bool Execute()
{
var buildProperties = new Dictionary<string, string>();
buildProperties["Configuration"] = "Debug";
var solution = @"C:\test\test.sln";
bool success = Build(solution, buildProperties)
return success;
}
private bool Build(string solution, Dictionary<string, string> buildProperties)
{
Guard.ValidPath(solution, nameof(solution));
BuildParameters buildParam = new BuildParameters()
BuildRequestData buildRequest = new BuildRequestData(solution, buildProperties, null, new string[] { "Build" }, null);
BuildResult buildResult = BuildManager.DefaultBuildManager.Build(buildParam, buildRequest);
if (buildResult.OverallResult == BuildResultCode.Success)
return true;
return false;
}
解决方案有一个项目。它的配置:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
etc.
我得到的错误:
:错误 C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ Microsoft.Data.Entity.targets(65,5): “EntityDeploySplit”任务无法从中实例化 部件 “C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ Microsoft.Data.Entity.Build.Tasks.dll”。 请验证是否已使用相同版本构建任务程序集 Microsoft.Build.Framework程序集作为您安装的程序集 计算机和您的主机应用程序没有错过绑定 重定向到Microsoft.Build.Framework。无法转换类型的对象 键入“Microsoft.Data.Entity.Build.Tasks.EntityDeploySplit” 'Microsoft.Build.Framework.ITask'
知道如何克服这个错误吗?为什么会这样?
答案 0 :(得分:5)
有类似的问题,但另一个错误消息。我的网络项目无法构建,因为他们试图将他们的任务转发给Microsoft.Build.Framework.ITask。我认为问题是他们使用的是旧版本,因此无法投射到新版本的ITask。为MSBuild 3.5找到了这个解决方案,它也适用于14.0。
MSDN Forum: MSBuild crashes with a "Message" task could not be instantiated exception
我将3.5更改为14.0并将其添加到我的app.config:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="14.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
答案 1 :(得分:2)
我设法通过引用Microsoft.Build.Framework v14.0解决了这个问题,其他Microsoft.Build dll是v12.0。现在它有效!