在构建期间从Visual Studio Extension传递自定义项目属性

时间:2013-06-04 19:23:41

标签: visual-studio msbuild vsx vsix

如何从Visual Studio Extension将自定义MsBuild属性传递给Visual Studio构建引擎(我想编写自定义加载项)?就像Visual Studio本身传递$(Configuration)$(Platform)之类的属性一样,我想附加到构建过程并传递我自己的属性(例如$(MyCustomProperty) = "foobar")。我知道可以使用MsBuild命令行(/p:Property)来完成,但我想从扩展程序中完成。

以下是我想要提供的一个示例:visual studio工具栏上的一个文本框,用户可以输入一些文本 - 一个值,我想传递给构建引擎。

然后在.csproj:

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

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

因此,只有当用户在我的扩展程序的文本框中输入AfterBuild时,目标DoAfterBuild才会被提取

1 个答案:

答案 0 :(得分:3)

您可以请求服务IVsBuildPropertyStorage,它有以下方法:

  

SetPropertyValue:由项目子类型用于设置MSBuild属性值。

这样的事情:

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