如何从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
才会被提取
答案 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(..);