尝试从控制台项目使用MSBuild时版本冲突

时间:2019-03-05 11:59:12

标签: msbuild

好吧,我快要死了。我们有一个VB.Net应用程序,其中包含许多相关程序集(所有都包含在解决方案中),这些程序集可以通过Visual Studio IDE很好地构建。现在,我想自动化构建以生成三个不同的版本(并将结果复制到我们的安装程序包中)。 经过研究后,我想到了以下代码,这些代码可用于 C#控制台项目

var projectFileName = @"D:\NetCode\60-40\Applications\ControlViewer\BridgeIt.vbproj";
string target = "Build";
var properties = new Dictionary<string, string>();
properties.Add("Configuration","NBBR");
properties.Add("Platform", "AnyCPU");
var buildRequest = new BuildRequestData(projectFileName, properties, null, new[] { target }, null);
var buildParams= new BuildParameters(new ProjectCollection());
var logger = new BasicLogger();
buildParams.Loggers = new List<ILogger>() { logger};
BuildManager.DefaultBuildManager.ResetCaches();
var result = BuildManager.DefaultBuildManager.Build(buildParams, buildRequest);
Debug.Print(logger.GetLogString());

这将构建所有程序集,仅在最后我得到以下错误:`

  

错误C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ 15.0 \ Bin \ Microsoft.Common.CurrentVersion.targets(1657,5):无法从实例化“ GetReferenceNearestTargetFrameworkTask”任务程序集“ C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Professional \ Common7 \ IDE \ CommonExtensions \ Microsoft \ NuGet \ NuGet.Build.Tasks.dll”。请验证任务程序集是使用与计算机上安装的版本相同的Microsoft.Build.Framework程序集构建的,并且您的主机应用程序没有缺少Microsoft.Build.Framework的绑定重定向。类型为NuGet.Build.Tasks.GetReferenceNearestTargetFrameworkTask的对象类型为Microsoft.Build.Framework.ITask。       :   最后的注释用荷兰语表示,并描述了“ InvalidCastException”。

我尝试过:

  • 为Microsoft.Build更新NuGetPackages。
  • 从VS安装程序安装NuGet工具
  • 按照this link中的说明,在gac中注册了构建dll(尽管我担心这是不明智的)

嗯,什么都行不通。可能是C#/ VB.Net兼容性问题吗?

其他想法:解决方案中的大多数项目都来自VS2015。当前我们正在使用VS 2017。

1 个答案:

答案 0 :(得分:0)

我进行了两项更改,使其生效:

var buildParams = new BuildParameters(new ProjectCollection() { DefaultToolsVersion = "15.0" });

我将其添加到app.config:

<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-15.1.0.0" newVersion="15.1.0.0" />
  </dependentAssembly>
</assemblyBinding>
</runtime>

别忘了我在GAC中安装了NuGet Build dll(我很可能不应该这样做)。