C#在#if中使用语句调试但不是装运

C#在#if中使用语句调试但不是装运

问题描述:

我有一个功能,我只想发生在调试,但不想运送该功能需要的DLL。这可能吗?C#在#if中使用语句调试但不是装运

我:

当然
#if DEBUG 
using MyAssembly; 
#endif 

中MyAssembly程序是由该项目引用。我希望MyAssembly.dll不能在发布模式下发货。这可以实现吗?将在这方面使用条件(“DEBUG”)的帮助?

+2

'使用'指令不会在程序集方面做任何事情 - 它们只是关于名称空间。您可能希望在项目文件中使程序集引用有条件...尽管如果没有任何代码*引用*以在发布模式下的程序集代码,那么C#编译器将不会使用该引用,至于I'意识到。 (你应该检查一下 - 不管怎样,我都会调整参考值来验证) –

+0

谢谢!感谢Jon的反馈! – Bati

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

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

(也有可能是一个<PackageReference>等)

+0

Marc,当你说“引用通常被删除”时,你是什么意思 - 如果我的代码在#if DEBUG下,那么这个代码将不能在Release中运行。但该组件仍在部署。我仍然在尝试你的语法..得到一些错误.. – Bati

+0

@Bati你需要检查IL,但实际的参考应该被删除;但是,您还需要检查部署配置,因为您可以部署不是引用的东西。如果没有真正的文件,不可能说更多。 –

+0

将Condition添加到参考节点的方法如下: Bati

这是完全正常的把一个using指令在#if DEBUG部分,编译调试时删除指令。

但是,这只是故事的一部分;它不会单独完成你的目标。 Visual Studio中的解决方案资源管理器还有一个参考文献部分。您还需要删除程序集的引用,或者在构建时仍会包含该引用。

我不记得任何在Visual Studio的用户界面,可以让你这样做,但我希望它应该有可能以某种方式,如果你手动编辑项目文件(它只是一个MSBuild文件)。就我个人而言,我很努力地避免做需要手动编辑项目文件的事情。 Visual Studio希望能够拥有这些文件,并且最终可能会产生冲突,您和Visual Studio将在其中更改对方的更改。

+0

感谢您的意见 – Bati