使用Microsoft建立VS2017解决方案。建立程序集:执行期间发生错误

时间:2019-04-09 08:09:09

标签: c# .net msbuild visual-studio-2017

我想开始使用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   不正确的,可能是一种永久的构造。韦里菲兹   巴黎圣母院集会。

(对不起,法语)

您能帮我吗?

1 个答案:

答案 0 :(得分:0)

  

与找不到工具集有关。

类似于this issue的事物。似乎此问题在vs2017(15.x)之后出现。

我按照您的步骤进行操作,遇到了如下相同的问题: enter image description here

  

我在this document上找到了有用的信息:

Visual Studio 2017和更高版本不再将MSBuild放在GAC中或修改注册表。不幸的是,这意味着希望使用MSBuild API评估或构建项目的应用程序不能隐式依赖Visual Studio安装。

  

这是我测试它的文档中描述的简单解决方法   作品:

  1. 在vs中,转到解决方案资源管理器=>引用,将Copy Local的{​​{1}}属性更改(将所有Microsoft.Build和Microsoft.Build.XXX都从true更改为false。< / p>

  2. Microsoft.Build.Locator添加NuGet程序包引用。

  3. 在调用使用MSBuild的任何方法之前,先添加对Locator API的调用。 Microsoft.Build.* //调用Locator API,然后再调用RebuildSolution(...)

  4. 构建项目并确保MSBuildLocator.RegisterDefaults();

  5. 此外,如果要使用it doesn't contain any Microsoft.Build.*.dll assemblies other than Microsoft.Build.Locator.dll构建项目,则必须定义X86属性(可以在xx.csproj中找到)。因此,如果您尚未在所构建的项目中定义配置,则建议您使用{“ Platform”,“ Any CPU”}。