2011-10-21 13 views
7

po tym, jak Microsoft oznaczył BuildEngine.Engine i BuildEngine.Project jako przestarzały, starałem się wykorzystać nową propozycję firmy Microsoft, jak można ją zobaczyć pod spodem. Ale nie mam pojęcia, gdzie mogę zintegrować xmlprojectfile. Czy jest tu ktoś, kto zna rozwiązanie tego problemu?Migracja Microsoft.Build.BuildEngine.Engine do Microsoft.Build.Evaluation.ProjectCollection

Plik projektu XML zawartość

<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> 

Stara wersja i działa (ale nieaktualny)

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(); 
} 

Nowy nie działa Verison

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(); 
} 

Odpowiedz

3

Należy również utworzyć obiekt Microsoft.Build.Execution.BuildRequestData zawierający plik projektu XML oraz słownik właściwości standardowych, takich jak Konfiguracja i platforma. Następnie należy utworzyć obiekt Microsoft.Build.Execution.BuildParameters zawierający obiekt ProjectCollection z fragmentu kodu i przekazać go do domyślnego Microsoft.Build.Execution.BuildManager.

PowerShell pseudokod:

#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) 
2

Brakuje project.Load (xmlprojectfile); linia w zmigrowanym kodzie. Musisz chyba jakoś dodać xmlprojectfile do kolekcji projectcollection.

1

Zamiast tworzenia nowy projekt z nowego hasła:

// var project = new Project(collection); 

użyj:

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