2011-10-21 39 views
7

sau khi Microsoft đánh dấu BuildEngine.Engine và BuildEngine.Project là lỗi thời tôi đã cố gắng sử dụng đề xuất mới từ Microsoft cách bạn có thể nhìn thấy nó bên dưới. Nhưng tôi không có ý tưởng nơi tôi có thể tích hợp xmlprojectfile. Có ai ở đây biết giải pháp của vấn đề này không?Di chuyển Microsoft.Build.BuildEngine.Engine sang Microsoft.Build.Evaluation.ProjectCollection

Hồ sơ dự án XML nội dung

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

Các phiên bản cũ và làm việc (nhưng lỗi thời)

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

mới không làm việc 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(); 
} 

Trả lời

3

Bạn cũng cần phải tạo đối tượng Microsoft.Build.Execution.BuildRequestData chứa tệp dự án XML và từ điển thuộc tính tiêu chuẩn như Cấu hình và Nền tảng. Sau đó, bạn tạo một đối tượng Microsoft.Build.Execution.BuildParameters chứa đối tượng ProjectCollection của bạn từ đoạn mã của bạn và chuyển nó tới Microsoft.Build.Execution.BuildManager mặc định.

mã giả 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) 
2

Bạn đang thiếu project.Load (xmlprojectfile); trong mã di chuyển của bạn. Bạn phải thêm xmlprojectfile vào projectcollection bằng cách nào đó, tôi đoán vậy.

1

Thay vì tạo ra một dự án mới với mới keyword:

// var project = new Project(collection); 

Sử dụng này:

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