我想开始使用Miscrosoft编译VS2017解决方案。从另一个代码构建程序集。
这是我的简化代码:
namespace Test
{
internal class Program
{
private static void Main(string[] args)
{
RebuildSolution(@"mySolution.sln", "Release", "x86", "4.6.1");
}
/// <summary>
/// Rebuild visual studio solution.
/// </summary>
/// <param name="slnPath">Path to .sln file</param>
/// <param name="configuration">Configuration to use (Release, Debug, ...)</param>
/// <param name="platform">Target platform (x86, x64, AnyCPU, ...)</param>
/// <param name="toolsversion">Tools version to use (4.0, 12.0, ...)</param>
public static void RebuildSolution(string slnPath, string configuration, string platform, string toolsversion)
{
if (!File.Exists(slnPath))
{
throw new Exception("sln file does not exist : " + slnPath);
}
ConsoleLogger cl = new ConsoleLogger(LoggerVerbosity.Minimal);
Dictionary<string, string> globalProperty = new Dictionary<string, string>
{
{ "Configuration", "Release" },
{ "Platform", "x86" },
{ "RebuildT4Templates" , "false" },
{ "ToolsVersion", "15.1" },
{ "VisualStudioVersion", "15.1" }
};
BuildRequestData buildRequest = new BuildRequestData(slnPath, globalProperty, null, new string[] { "Rebuild" }, null);
BuildParameters bp = new BuildParameters();
bp.Loggers = new List<ILogger> { cl }.AsEnumerable();
BuildResult buildResult = BuildManager.DefaultBuildManager.Build(bp, buildRequest);
}
}
}
在将Miscrosoft.Build。*程序集的最新版本(15.1.0.0)添加到我的解决方案之后,出现了我无法修复的错误消息(在执行过程中):
C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ 15.0 \ Bin \ Roslyn \ Microsoft.CSharp.Core.targets(52,5): 错误MSB4127:无法即时显示“ Csc”或“部分” l'assembly“ C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ 15.0 \ Bin \ Roslyn \ Microsoft.Build.Tasks.CodeAnalysis.dll”。 拉梅德爱德维奇艺术集会 组装版本Microsoft.Build.Framework单元安装 主管协调处 将Microsoft.Build.Framework dans votre应用程序倒入。不可能 d'effectuer un cast d'un objet de type 键入“ Microsoft.CodeAnalysis.BuildTasks.Csc” 'Microsoft.Build.Framework.ITask'。 C:\ Program Files(x86)\ Microsoft 视觉效果 Studio \ 2017 \ Community \ MSBuild \ 15.0 \ Bin \ Roslyn \ Microsoft.CSharp.Core.targets(52,5): 错误MSB4060:“将Csc”声明为manière或utilisée 不正确的,可能是一种永久的构造。韦里菲兹 巴黎圣母院集会。
(对不起,法语)
您能帮我吗?
答案 0 :(得分:0)
与找不到工具集有关。
类似于this issue的事物。似乎此问题在vs2017(15.x)之后出现。
我在this document上找到了有用的信息:
Visual Studio 2017和更高版本不再将MSBuild放在GAC中或修改注册表。不幸的是,这意味着希望使用MSBuild API评估或构建项目的应用程序不能隐式依赖Visual Studio安装。
这是我测试它的文档中描述的简单解决方法 作品:
在vs中,转到解决方案资源管理器=>引用,将Copy Local
的{{1}}属性更改(将所有Microsoft.Build和Microsoft.Build.XXX都从true更改为false。< / p>
向Microsoft.Build.Locator添加NuGet程序包引用。
在调用使用MSBuild的任何方法之前,先添加对Locator API的调用。
Microsoft.Build.*
//调用Locator API,然后再调用RebuildSolution(...)
构建项目并确保MSBuildLocator.RegisterDefaults();
。
此外,如果要使用it doesn't contain any Microsoft.Build.*.dll assemblies other than Microsoft.Build.Locator.dll
构建项目,则必须定义X86属性(可以在xx.csproj中找到)。因此,如果您尚未在所构建的项目中定义配置,则建议您使用{“ Platform”,“ Any CPU”}。