在发布和调试模式之间,Visual Studio中的ANTLR生成的文件冲突

时间:2016-02-05 16:47:10

标签: visual-studio build antlr

我将ANTLR4Visual StudioC#一起使用。在构建过程中,ANTLR4工具生成6个C#源文件(即Parser,Lexer,Visitor,Listener等),这些文件对应ANTLR生成的解析器。这个文件是在项目的obj / Debug目录中生成的(假设选择了Debug模式)。我将这些文件添加为解决方案资源管理器中的链接,以检查生成的代码。

如果我尝试更改为发布模式ANTLR4在项目的obj / Release目录中生成相同的文件,并且这些文件与obj / Debug中生成的文件冲突(同一名称空间中的dublicate类) 。目录

问题是:

当我处于发布模式并完成上述操作时,有没有办法从调试模式中排除解决方案资源管理器中的生成文件(在发布模式下)或者我必须从解决方案中手动排除obj / Debug目录探险家为了避免冲突?

提前致谢

1 个答案:

答案 0 :(得分:1)

我在同样的问题上挣扎。主要问题是,已将文件链接到项目DEBUG配置。因此,当您切换到RELEASE配置时,链接仍然存在,现在您在项目中有重复的定义。 obj / DEBUG路径中的可见内容和obj / RELEASE路径中的不可见

我不知道在VS-GUI上解决这个问题的任何解决方案。但是可以修补cproj文件以获得可接受的解决方案:

首先是原始部分:

...
<ItemGroup>
    <Compile Include="DataRepository.cs" />
    <Compile Include="SpreadsheetErrorListener.cs" />
    <Compile Include="SpreadsheetVisitor.cs" />
    <Compile Include="Program.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="obj\Debug\SpreadsheetBaseListener.cs" />
    <Compile Include="obj\Debug\SpreadsheetBaseVisitor.cs" />
    <Compile Include="obj\Debug\SpreadsheetLexer.cs" />
    <Compile Include="obj\Debug\SpreadsheetListener.cs" />
    <Compile Include="obj\Debug\SpreadsheetParser.cs" />
    <Compile Include="obj\Debug\SpreadsheetVisitor.cs" />
</ItemGroup>
...

你的看起来应该相似。

我将ItemGroups拆分为:

...
<ItemGroup>
    <Compile Include="DataRepository.cs" />
    <Compile Include="SpreadsheetErrorListener.cs" />
    <Compile Include="SpreadsheetVisitor.cs" />
    <Compile Include="Program.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <Compile Include="obj\Release\SpreadsheetBaseListener.cs" />
    <Compile Include="obj\Release\SpreadsheetBaseVisitor.cs" />
    <Compile Include="obj\Release\SpreadsheetLexer.cs" />
    <Compile Include="obj\Release\SpreadsheetListener.cs" />
    <Compile Include="obj\Release\SpreadsheetParser.cs" />
    <Compile Include="obj\Release\SpreadsheetVisitor.cs" />
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <Compile Include="obj\Debug\SpreadsheetBaseListener.cs" />
    <Compile Include="obj\Debug\SpreadsheetBaseVisitor.cs" />
    <Compile Include="obj\Debug\SpreadsheetLexer.cs" />
    <Compile Include="obj\Debug\SpreadsheetListener.cs" />
    <Compile Include="obj\Debug\SpreadsheetParser.cs" />
    <Compile Include="obj\Debug\SpreadsheetVisitor.cs" />
</ItemGroup>
...

在VS中,两个目录都是可见的,但只有一个用于Intellisense和编译期间。

当前选择的文件显示为“开启者”(抱歉,不知道正确的名称)

DEBUG configuration

RELEASE configuration

看起来不太好但是解决了这个问题。

缺点:

每次添加新配置时,都必须再次修补cproj文件。但这样做是值得的,因为Intellisense,Resharper和所有其他漂亮的小帮手都会工作。