我将ANTLR4
与Visual Studio
和C#
一起使用。在构建过程中,ANTLR4
工具生成6个C#
源文件(即Parser,Lexer,Visitor,Listener等),这些文件对应ANTLR
生成的解析器。这个文件是在项目的obj / Debug目录中生成的(假设选择了Debug模式)。我将这些文件添加为解决方案资源管理器中的链接,以检查生成的代码。
如果我尝试更改为发布模式ANTLR4
在项目的obj / Release目录中生成相同的文件,并且这些文件与obj / Debug中生成的文件冲突(同一名称空间中的dublicate类) 。目录
问题是:
当我处于发布模式并完成上述操作时,有没有办法从调试模式中排除解决方案资源管理器中的生成文件(在发布模式下)或者我必须从解决方案中手动排除obj / Debug目录探险家为了避免冲突?
提前致谢
答案 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和编译期间。
当前选择的文件显示为“开启者”(抱歉,不知道正确的名称)
看起来不太好但是解决了这个问题。
缺点:
每次添加新配置时,都必须再次修补cproj文件。但这样做是值得的,因为Intellisense,Resharper和所有其他漂亮的小帮手都会工作。