C#使用#if DEBUG内的语句,但不是装配程序

时间:2017-06-14 22:23:50

标签: c#

我有一个功能,我只想在Debug上发生,但不想发送此功能所需的dll。这可能吗?

我有:

#if DEBUG
using MyAssembly;
#endif

当然,项目正在引用MyAssembly。我希望MyAssembly.dll不会在发布模式下发货。可以实现吗?使用Conditional(" DEBUG")会在这方面有所帮助吗?

2 个答案:

答案 0 :(得分:8)

编译器通常会自动删除不需要的引用,但是:通过更改csproj以在Condition上包含PropertyGroup,您可以更加明确。类似的东西:

<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
  <Reference Include="YourReference" />
</PropertyGroup>

(也可能是<PackageReference>等)

答案 1 :(得分:5)

#if DEBUG指令放在<cstdint>部分中是完全正确的,并且将在编译为调试时删除该指令。

但是,这只是故事的一部分;它本身不会实现你的目标。 Visual Studio中的解决方案资源管理器还具有引用部分。您还需要删除程序集的引用,否则在构建时仍会包含它。

我不记得Visual Studio用户界面中可以执行此操作的任何内容,但我希望如果您手动编辑项目文件(它只是一个MSBuild文件),它应该是可能的。 。就个人而言,我非常努力避免做需要手动编辑项目文件的事情。 Visual Studio希望能够拥有这些文件,并且您最终可能会创建冲突,而您和Visual Studio会相互覆盖其中的更改。