2011-10-21 4 views
7

Mais je n'ai aucune idée d'où je peux intégrer le fichier xmlproject. Est-ce que quelqu'un connaît la solution de ce problème?Migrer Microsoft.Build.BuildEngine.Engine à Microsoft.Build.Evaluation.ProjectCollection

le contenu du fichier de projet 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> 

La version ancienne et de travail (mais obsolète)

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

Le nouveau ne fonctionne pas 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(); 
} 

Répondre

3

Vous devez également créer un objet Microsoft.Build.Execution.BuildRequestData contenant le fichier de projet XML et un dictionnaire de propriétés std telles que Configuration et Plate-forme. Ensuite, vous créez un objet Microsoft.Build.Execution.BuildParameters contenant votre objet ProjectCollection à partir de votre extrait de code et le transmettez à la valeur par défaut Microsoft.Build.Execution.BuildManager.

Code powershell pseudo:

#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

Il vous manque project.Load (xmlprojectfile); ligne dans votre code migré. Vous devez ajouter xmlprojectfile dans projectcollection, je suppose.

1

Au lieu de créer un nouveau projet avec nouveau mot-clé:

// var project = new Project(collection); 

Utilisez ceci:

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