【问题标题】:Limit custom MSBuild target to the file(s) selected in Visual Studio将自定义 MSBuild 目标限制为在 Visual Studio 中选择的文件
【发布时间】:2018-11-01 16:54:22
【问题描述】:

我有一个小的自定义 MSBuild 目标:

<ItemGroup>
   <Foo Include="file1.foo"/>
   <Foo Include="file2.foo"/>
   <Foo Include="file3.foo"/>
   ...
</ItemGroup>
<Target Name="Foo2Bar" Inputs="foo.config;@(Foo)" Outputs="%(Foo.Filename).bar">
   <Exec Command="path\to\script @(Foo) -o %(Foo.Filename).bar"/>
</Target>

现在我希望能够在 Visual Studio 中选择 *.foo 文件之一并触发处理这个文件(例如,通过按 CtrlF7 或在解决方案资源管理器中单击鼠标右键 -> 编译)。似乎这设置了一个属性$(SelectedFiles),但我没有找到任何有用的教程或示例如何使这项工作......

【问题讨论】:

    标签: visual-studio msbuild target


    【解决方案1】:

    将自定义 MSBuild 目标限制为在 Visual Studio 中选择的文件

    如果我理解正确,您想选择*.foo 文件之一作为目标,如果是,您可以将列表作为属性传递,因此我们需要将项目转换为属性:

    <Target Name="BuildMigrationZip">
       <PropertyGroup>
          <FooProperty>@(Foo)</FooProperty>
       </PropertyGroup>
    
      <MSBuild Projects="$(MSBuildThisFile)" Targets="Foo2Bar"
               Properties="FilesToFoo=$(FooProperty)" />
    </Target>
    

    然后当我们用 MSBuild 命令行构建这个文件时,我们可以传递属性FooProperty:

    msbuild.exe "YourCustomTargetFile" /p:FooProperty=file1.foo
    

    您可以查看this thread了解更多详细信息。

    如果我理解你的错误,请免费告诉我,我会尽快继续关注。

    希望这会有所帮助。

    【讨论】:

    • 这只能让我在命令行上选择文件,对吧?我想在 Visual Studio IDE 中选择文件。它已经可以使用 F7 处理所有过时的文件。我现在想用 Ctrl-F7 触发处理选定的文件(不管是否过期,就像使用内置的 ClCompile 目标一样)
    • @Tobi,是的,这只允许您在命令行上选择文件。如果您想在 Visual Studio IDE 中选择文件,我们必须用您的自定义目标覆盖 Ctrl-F7。或者您可以开发像 Ctrl-F8 这样的项目扩展来调用您的自定义目标。这两种方法都不简单。您可以查看此线程以获取详细信息:stackoverflow.com/questions/45835043/…
    • 感谢您的快速回复@Leo!不知何故,对于这么简单的事情来说,这似乎太复杂了。比较:在 Xcode 中,我想要的行为是默认行为。 Cmd-B 执行所有构建规则 Ctrl-Cmd-B 只是选定文件的一个,不管它是内置的还是自定义的处理规则。而且我仍然相信它在 MSBuild 中是可能的,因为它适用于内置目标:如果选择了 *.cpp 文件,则仅执行 ClCompile(并且仅在此文件上),如果选择了 *.idl ,仅Midl 目标(也仅在所选文件上)...
    猜你喜欢
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2017-03-31
    • 1970-01-01
    相关资源
    最近更新 更多