是否可以在Visual Studio中向项目添加一个类,并且只为该项目的Debug配置构建该类?也就是说,它根本不会出现在Release版本中。
如果可能,是否也可以为资源做同样的事情?
我正在考虑仅在调试配置中运行但从程序集中删除以供发布的测试类。
答案 0 :(得分:6)
您可以使用#DEBUG(请参阅Jon's answer)来获取课程。
对于资源,您可以编辑MSBuild脚本文件,以根据所选的构建模式有条件地包含项目的各个部分。
.csproj文件是XML MSBuild脚本,如果在文本编辑器中打开它,您应该在项目的所有部分中找到它。如果您可以找到要从某些构建中排除的部分,则可以使用Condition属性标记它们。例如,要仅为Debug配置构建ItemGroup,您可以这样做:
<ItemGroup Condition=" '$(Configuration)' == 'Debug' " ...
您应该能够查看这个并找到要排除的资源,并向它们或其父组添加类似的Condition属性。
但是,我建议您使用单独的程序集进行测试,不要让它与主程序集混淆。
答案 1 :(得分:3)
课程很简单:
#if DEBUG
// Put your class here
#endif
虽然不确定资源...我怀疑通过手动编辑项目文件是可行的,但不是在Visual Studio中。
我不会为测试目的这样做 - 我鼓励你使用单独的程序集进行测试。除此之外,这意味着您可以通过针对发布版本进行测试来测试您发布的内容。如果您需要访问内部类型/成员,则始终可以使用[InternalsVisibleTo]
授予从生产程序集到测试程序集的内部访问权限。实际上,我怀疑这是属性的最常见用途:)
答案 2 :(得分:3)
至于资源,你确实需要手动修改* .csproj,改变
<EmbeddedResource Include="Components\AdmittanceChart.resx">
<DependentUpon>AdmittanceChart.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
到
<EmbeddedResource Condition=" '$(Configuration)|$(Platform)' == 'Debug' " Include="Components\AdmittanceChart.resx">
<DependentUpon>AdmittanceChart.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
但是,正如乔恩所说,这不一定是好习惯。
答案 3 :(得分:1)
您也可以使用Conditional属性。本文介绍了Conditional Compilation