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

Mac*_*iak 7 msbuild vsx visual-studio 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>
Run Code Online (Sandbox Code Playgroud)

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

Ert*_*maa 4

您可以请求服务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(..);
Run Code Online (Sandbox Code Playgroud)