【问题标题】:Passing custom project properties from Visual Studio Extension during build在构建期间从 Visual Studio 扩展传递自定义项目属性
【发布时间】:2013-06-04 19:23:40
【问题描述】:

如何将自定义 MsBuild 属性从 Visual Studio Extension 传递给 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 时才会被执行

【问题讨论】:

  • Visual Studio 扩展如何调用 MSBUILD?
  • @NickCarlson - 我不想调用 MsBuild,但 .csproj 文件是 MsBuild 脚本,Visual Studio 在构建期间传递 $(Platform) 和 $(Configuration) 变量的实际值。我想将 $(MyOwnProperty) 值传递给这个脚本,所以我可以使用它(例如
  • 在您的原始帖子中,您说您希望能够通过 Visual Studio 扩展定义您自己的属性,但现在您说您不想调用 MSBUILD。您是否正在编写自己的扩展并想要定义自己的自定义属性?也许代码示例可以帮助说明问题。
  • * Visual Studio 扩展是扩展 Visual Studio 功能的附加程序。 (visualstudiogallery.msdn.microsoft.com)。您是否编写了 Visual Studio 扩展并且想以某种方式将属性传递给 MSBUILD,或者通过“Visual Studio 扩展”您指的是 C# 项目文件,其文件 EXTENSION 与 Visual Studio 相关联?
  • @NickCarlson - 我的意思是 Visual Studio 的附加组件(通常称为 Visual Studio 扩展 - 简称 VSX),我说我不想调用 MSBUILD,因为 Visual Studio 是不在内部使用 MSBUILD 命令行,但具有集成的构建系统(基于或与 MSBUILD 相关 - 这并不重要)。我用一个我想要完成的例子更新了这个问题。

标签: visual-studio msbuild vsx vsix


【解决方案1】:

您可以请求服务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(..);

【讨论】:

    猜你喜欢
    • 2011-06-13
    • 2022-08-23
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多