構建

2013-06-04 23 views
5

期間從Visual Studio擴展傳遞定製項目屬性如何傳遞一個自定義的MSBuild屬性到Visual Studio生成引擎從Visual Studio擴展(我想寫一個自定義的插件)?就像Visual Studio本身傳遞的屬性如$(Configuration)$(Platform)一樣,我想附加到構建過程並傳遞我自己的屬性(例如$(MyCustomProperty) = "foobar")。我知道它可以使用MsBuild命令行(/p:Property)來完成,但我想從擴展中完成。構建

這裏是我想accompilsh什麼一個例子:Visual Studio的工具欄,在文本框,其中用戶可以鍵入一些文字 - 一個值,我想傳遞給構建引擎。

然後在.csproj的:

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

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

所以目標AfterBuild將exectued只有當用戶輸入DoAfterBuild到我的擴展的文本框中

+0

如何的Visual Studio擴展調用MSBUILD? – Nicodemeus

+0

@NickCarlson - 我不想調用MsBuild,但.csproj文件是MsBuild腳本,Visual Studio在構建過程中傳遞$(Platform)和$(Configuration)變量的實際值。我希望將$(MyOwnProperty)值傳遞給此腳本,以便我可以使用它(例如) –

+0

你希望能夠通過Visual Studio Extension定義你自己的屬性,但是現在你說你不想調用MSBUILD。你是否正在編寫自己的擴展並想定義自己的自定義屬性?也許代碼示例將有助於說明問題。 – Nicodemeus

回答

3

您可以要求服務IVsBuildPropertyStorage,它有以下方法:

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

類似這樣的:

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

的更多信息:http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertystorage.aspx