我有一个生成文件的文件夹,该文件夹反映了我项目的文件。
示例:如果项目在Framework/HaTool.cs
上有一个文件,那么在Generated/Framework/HaTool.cs
上也有一个文件。
我正在尝试使用Generated
文件进行构建,并使用原始文件进行调试和开发。 (我正在使用#line
指令)
除了让我似乎无法找到一种方法来使Visual Studio(2017社区)都显示Generated
目录及其在解决方案资源管理器中的文件和不是< / strong>尝试在设计时将它们一起编译。
我当前的设置不会在解决方案资源管理器中向我显示文件,但会使用它们进行构建。这是我的.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在不构建文件的情况下显示它们?我想念什么?
答案 0 :(得分:1)
从评论中复制。
首先,如果可能的话,避免在MSBuild脚本上进行自定义非常重要,因为Visual Studio或任何其他IDE可能无法很好地处理自定义。这是可以理解的,因为定制几乎没有限制,但是IDE代码库必须遵循一些规则。
第二,在您的特定情况下,如果我们将<Compile>
标记手动替换为<None>
标记,则VS可以显示文件是您项目中的普通文件,而不是源代码来馈送编译器。对于其他人(在您的团队中或在其他情况下),这种技巧可能很难理解为什么要应用它,因为名称中的<None>
标签是针对非源代码文件(例如txt或其他扩展名)的。
第三,如果您确实需要此类文件具有特殊的行为,则可以考虑使用自己的标签扩展MSBuild系统(就像ANTLR C#通过添加<Antlr4>
标签一样进行扩展),https://github.com/tunnelvisionlabs/antlr4cs