MSBuild:编译生成器如何工作

Fio*_*onn 7 c# msbuild visual-studio-2013

我试图使用的MSBuild:编译生成当文件被保存在Visual Studio中触发我的自定义文件类型的汇编(应该像一个自定义的工具,但使用的MSBuild).构建过程本身正在工作,但是如果保存文件似乎不会触发它.

有人可以解释MSBuild:Compile条目到底在做什么吗?到目前为止,我刚刚看到这在antlr msbuild脚本和XAML中使用过.

下面我有一个msbuild设置的摘录,用于将*.myext文件编译为*.g.ts文件.


我的目标档案:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <UsingTask TaskName="SampleNamespace.CustomCompilerTask" AssemblyFile="MyTask.dll" />

    <PropertyGroup>
        <PrepareResourcesDependsOn>
            CustomLayoutCompile;
            $(PrepareResourcesDependsOn)
        </PrepareResourcesDependsOn>
    </PropertyGroup>

    <ItemDefinitionGroup>
        <CustomTypeCompile>
            <Generator>MSBuild:Compile</Generator>
        </CustomTypeCompile>
    </ItemDefinitionGroup>

    <Target Name="CustomLayoutCompile" Inputs="@(TypeScriptCompile);@(CustomTypeCompile)" Outputs="@(CustomTypeCompile->'%(RootDir)%(Directory)%(Filename).g.ts')">
        <CustomCompilerTask TypeScriptFiles="@(TypeScriptCompile)" LayoutFiles="@(CustomTypeCompile)" />
    </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

项目文件中的条目:

....

<ItemGroup>
    <TypeScriptCompile Include="MyControl.ts">
      <DependentUpon>MyControl.myext</DependentUpon>
    </TypeScriptCompile>
    <TypeScriptCompile Include="MyControl.g.ts">
      <DependentUpon>MyControl.myext</DependentUpon>
    </TypeScriptCompile>
</ItemGroup>
<ItemGroup>
    <CustomTypeCompile Include="MyControl.myext">
        <Generator>MSBuild:Compile</Generator>
    </CustomTypeCompile>
</ItemGroup>
....

<Import Project="path/to/my/target/file/mytargets.targets" />

....
Run Code Online (Sandbox Code Playgroud)

小智 0

我正在使用 VS 2019,并且遇到了同样的问题。我终于找到了一个解决方法,这使得这个问题在我看来更像是一个 VisualStudio/MSBuild 错误。我的解决方法是,当您定义 时ItemDefinitionGroup,定义一个自定义/扩展文件属性页,如下所示。这对我有用。希望它也适用于其他人。

<ItemGroup>
    <PropertyPageSchema Include="$(MSBuildThisFileDirectory)CustomPerperties.CSharp.xml">
        <Context>File;BrowseObject</Context>
    </PropertyPageSchema>
    <AvailableItemName Include="CustomTypeCompile" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)