好吧,我快要死了。我们有一个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”。
我尝试过:
嗯,什么都行不通。可能是C#/ VB.Net兼容性问题吗?
其他想法:解决方案中的大多数项目都来自VS2015。当前我们正在使用VS 2017。
答案 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(我很可能不应该这样做)。