我有一个生成文件的文件夹,它反映了我的项目文件。
示例:如果项目在Framework/HaTool.cs
上有一个文件,那么Generated/Framework/HaTool.cs
上也会有一个文件。
我正在尝试使用Generated
文件进行构建,并使用原始文件进行调试和开发。 (我正在使用#line
指令)
我几乎得到了一切工作,除了我似乎无法找到一种方法让Visual Studio(2017社区)在解决方案资源管理器中显示Generated
目录及其文件,而不是尝试在设计时将它们一起编译。
我当前的设置不会在解决方案资源管理器中向我显示文件,但会使用它们来构建。以下是我的.csproj
文件的相关部分:
<Project ToolsVersion="15.0">
<PropertyGroup Condition="'$(GeneratedSourcePath)'==''">
<GeneratedSourcePath>Generated</GeneratedSourcePath>
</PropertyGroup>
<ItemGroup>
<Compile Remove="$(GeneratedSourcePath)\**" />
</ItemGroup>
<Target Name="UseGeneratedTarget" BeforeTargets="BeforeBuild" KeepDuplicateOutputs="false">
<ItemGroup>
<Compile
Condition="Exists('$(GeneratedSourcePath)\%(Compile.Identity)')"
Include="$(GeneratedSourcePath)\%(Compile.Identity)" />
<Compile
Condition="Exists('$(GeneratedSourcePath)\%(Compile.Identity)')"
Remove="%(Compile.Identity)" />
</ItemGroup>
</Target>
<Target Name="CleanupTarget" AfterTargets="AfterBuild">
<ItemGroup>
<Compile>
<NonGeneratedFilename>$([System.String]::Copy('%(Compile.Identity)').Replace('$(GeneratedSourcePath)\', ''))</NonGeneratedFilename>
</Compile>
</ItemGroup>
<ItemGroup>
<Compile Include="@(Compile->'%(NonGeneratedFilename)')"/>
</ItemGroup>
</Target>
</Project>
有没有办法简单地允许VS显示文件而不构建它们?我错过了什么?
复制评论。
首先,如果可以的话,避免在MSBuild脚本上进行自定义非常重要,因为Visual Studio或任何其他IDE可能无法很好地处理您的自定义。这是可以理解的,因为定制几乎没有限制,但IDE代码库必须遵循一些规则。
其次,在你的具体情况下,如果我们用<Compile>
标签手动替换<None>
标签,那么VS可以显示文件是项目中的普通文件,但不是源代码来提供编译器。这样的技巧对于其他人(在你的团队或其他情况下)很难理解为什么你应用它,因为像名称所示的<None>
标签用于非源代码文件,例如txt或其他扩展。
第三,如果您确实需要这些文件具有特殊行为,您可以考虑使用自己的标记扩展MSBuild系统(如ANTLR C#通过添加<Antlr4>
标记来实现),https://github.com/tunnelvisionlabs/antlr4cs