簡體   English   中英

將Microsoft.Build.BuildEngine.Engine遷移到Microsoft.Build.Evaluation.ProjectCollection

[英]Migrate Microsoft.Build.BuildEngine.Engine to Microsoft.Build.Evaluation.ProjectCollection

在Microsoft將BuildEngine.Engine和BuildEngine.Project標記為過時之后,我嘗試使用Microsoft的新建議,如何在下面看到它。 但是我不知道在哪里可以集成xmlprojectfile。 這里有人知道這個問題的解決方案嗎?

XML項目文件內容

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <ProjectToBuild Include ="myproject.csproj" />
  </ItemGroup>  
  <Target Name="Build">
    <MSBuild Projects="@(ProjectToBuild)"
      Properties="Configuration=Debug" StopOnFirstFailure="true" />
  </Target>
</Project>

舊版本和工作版本(但已過時)

Microsoft.Build.BuildEngine.Engine engine = new Microsoft.Build.BuildEngine.Engine();
engine.DefaultToolsVersion = "4.0";
engine.RegisterLogger(new ConsoleLogger());
Microsoft.Build.BuildEngine.Project project = new Microsoft.Build.BuildEngine.Project(engine);
project.Load(xmlprojectfile);
if (!project.Build())
{
    Console.ReadLine();
}

新的不起作用的版本

Microsoft.Build.Evaluation.ProjectCollection collection = new Microsoft.Build.Evaluation.ProjectCollection();
collection.DefaultToolsVersion = "4.0";
collection.RegisterLogger(new ConsoleLogger());
Microsoft.Build.Evaluation.Project project = new Microsoft.Build.Evaluation.Project(collection);
if (!project.Build())
{
    Console.ReadLine();
}

您還需要創建一個Microsoft.Build.Execution.BuildRequestData對象,其中包含XML項目文件和std屬性字典,例如Configuration和Platform。 然后,創建一個Microsoft.Build.Execution.BuildParameters對象,該對象包含來自代碼片段的ProjectCollection對象,並將其傳遞給默認的Microsoft.Build.Execution.BuildManager。

powershell偽代碼:

#set build properties
$props = new-object "System.Collections.Generic.Dictionary``2[[System.String],[System.String]]"
$props.Add("Configuration",$config)
$props.Add("Platform",$platform)

#create the projectCollection
$projectCollection = new-object Microsoft.Build.Evaluation.ProjectCollection -argumentList $props,$loggers,"ConfigurationFile,Registry"
$request = new-object Microsoft.Build.Execution.BuildRequestData -argumentlist $project,$props,$null,$targets,$null

#create a BuildParameters object to hold the Project Collection
$parameters = new-object Microsoft.Build.Execution.BuildParameters -argumentlist @($projectCollection)
$parameters.MaxNodeCount = 1
$parameters.Loggers = $projectCollection.Loggers
$parameters.ToolsetDefinitionLocations = "ConfigurationFile,Registry"
$parameters.DefaultToolsVersion = $toolsVersion

#get the build manager and submit a build request with the appropriate parameters
$manager = [Microsoft.Build.Execution.BuildManager]::DefaultBuildManager 
$result = $manager.Build($parameters, $request)

您缺少project.Load(xmlprojectfile); 行在您的遷移代碼中。 我想您必須以某種方式將xmlprojectfile添加到projectcollection中。

而不是使用new關鍵字創建項目:

// var project = new Project(collection);

用這個:

 var project = collection.LoadProject("myproject.csproj")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM