我有一個ANTLR語法文件作爲C#項目文件的一部分,並遵循User Manual中列出的步驟。MSBuild似乎只將舊輸出文件用於定製構建工具
<Project ...>
<PropertyGroup>
<Antlr3ToolPath>$(ProjectDir)tools\antlr-3.1.3\lib</Antlr3ToolPath>
<AntlrCleanupPath>$(ProjectDir)AntlrCleanup\$(OutputPath)</AntlrCleanupPath>
</PropertyGroup>
<ItemGroup>
<Antlr3 Include="Grammar\Foo.g">
<OutputFiles>FooLexer.cs;FooParser.cs</OutputFiles>
</Antlr3>
<Antlr3 Include="Grammar\Bar.g">
<OutputFiles>BarLexer.cs;BarParser.cs</OutputFiles>
</Antlr3>
</ItemGroup>
<Target Name="GenerateAntlrCode"
Inputs="@(Antlr3)"
Outputs="%(Antlr3.OutputFiles)">
<Exec Command="java -cp %22$(Antlr3ToolPath)\antlr-3.1.3.jar%22 org.antlr.Tool -message-format vs2005 @(Antlr3Input)" Outputs="%(Antlr3Input.OutputFiles)" />
<Exec Command="%22$(AntlrCleanupPath)\AntlrCleanup.exe%22 @(Antlr3Input) %(Antlr3Input.OutputFiles)" />
</Target>
<ItemGroup>
<!-- ...other files here... -->
<Compile Include="Grammar\FooLexer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Foo.g</DependentUpon>
</Compile>
<Compile Include="Grammar\FooParser.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Foo.g</DependentUpon>
</Compile>
<!-- ... -->
</ItemGroup>
</Project>
無論出於何種原因,Compile
步驟僅使用代碼的舊版本,沒有扭捏的量出現,以幫助。
「舊版本」,我的意思是說,如果我清理解決方案,建立項目,Foo.g
將使FooLexer.cs
和FooParser.cs
。如果我應該更新到Foo.g
並重新編譯,則詞法分析器和分析器C#文件的新版本將被忽略,並使用舊版本。我必須再次編譯...
有關C#和antlr的更多信息? – Kiquenet 2010-08-18 11:44:37