2013-06-04 31 views
5

Làm cách nào tôi có thể chuyển thuộc tính MsBuild tùy chỉnh cho công cụ xây dựng Visual Studio từ Visual Studio Extension (Tôi muốn viết bổ trợ tùy chỉnh)? Cũng giống như Visual Studio chính nó là đi qua tài sản như $(Configuration)$(Platform), tôi muốn đính kèm vào một quá trình xây dựng và vượt qua tài sản của riêng tôi (ví dụ: $(MyCustomProperty) = "foobar"). Tôi biết nó có thể được thực hiện bằng cách sử dụng dòng lệnh MsBuild (/p:Property), nhưng tôi muốn làm điều đó từ một phần mở rộng. Dưới đây là một ví dụ về những gì tôi muốn đi kèm: một hộp văn bản trên thanh công cụ phòng thu trực quan, nơi người dùng có thể nhập vào một số văn bản - một giá trị, mà tôi muốn vượt qua để xây dựng động cơ.Chuyển thuộc tính dự án tùy chỉnh từ Visual Studio Extension trong khi xây dựng

Sau đó, trong csproj:

<PropertyGroup> 
    <MyCustomProperty Condition=" '$(MyCustomProperty)' == '' ">DefaultValue</MyCustomProperty> 
</PropertyGroup> 

<Target Name="AfterBuild" Condition=" '$(MyCustomProperty)' = 'DoAfterBuild' "> 
    ... 
</Target> 

Vì vậy, mục tiêu AfterBuild sẽ được exectued chỉ khi người dùng gõ DoAfterBuild vào hộp văn bản mở rộng của tôi

+0

Cách Visual Studio Extension gọi MSBUILD? – Nicodemeus

+0

@NickCarlson - Tôi không muốn gọi MsBuild, nhưng các tệp .csproj là các tập lệnh MsBuild và Visual Studio đang chuyển các giá trị thực tế của các biến $ (Nền tảng) và $ (Cấu hình) trong khi xây dựng. Tôi muốn có giá trị $ (MyOwnProperty) được chuyển cho tập lệnh này, vì vậy tôi có thể sử dụng nó (ví dụ: ) –

+0

Trong bài viết gốc bạn đã nói bạn muốn có thể xác định thuộc tính của riêng bạn thông qua một Visual Studio Extension, nhưng bây giờ bạn đang nói rằng bạn không muốn gọi MSBUILD. Bạn có đang viết phần mở rộng của riêng mình và muốn xác định các thuộc tính tùy chỉnh của riêng mình không? Có lẽ một mẫu mã sẽ giúp minh họa vấn đề. – Nicodemeus

Trả lời

3

Bạn có thể yêu cầu dịch vụ IVsBuildPropertyStorage, nó đã phương pháp sau đây:

SetPropertyValue Used by a project subtype to set an MSBuild property value. 

Một cái gì đó như thế này:

EnvDTE.Project proj = ...; 
var sol = Package.GetGlobalService(typeof(VsSolution)) as IVsSolution; 
IVsHierarchy hier; 
sol.GetProjectOfUniqueName(p.UniqueName, out hier); 
var storage = hier as IVsBuildPropertyStorage; 
storage.SetPropertyValue(..); 

Thông tin khác: http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertystorage.aspx

Các vấn đề liên quan