如果程序集存在,则进行C#条件编译
本文关键字:条件 编译 程序集 存在 如果 | 更新日期: 2023-09-27 18:25:35
我有一个项目,其引用可能存在,也可能不存在。我有使用该引用的代码,并且我希望只有在程序集存在的情况下才编译它。我想的是:
#if ASSEMBLY_EXISTS
AssemblyClass.DoSomething();
#endif
我可以在顶部放一个#define,并根据需要进行注释/取消注释,但我更希望它能在没有我手动干预的情况下以某种方式知道是否存在,这让我相信#if不适用于这种情况。是否有其他方法可以根据程序集是否存在进行有条件编译?
也许可以在MSBUILD中使用一个条件;
它看起来有点像
<PropertyGroup>
<DefineConstants Condition="Exists('my.dll') ">$(DefineConstants);DLLEXISTS</DefineConstants>
</PropertyGroup>
并且应该放在.csproj文件中。
这大致读作"如果my.dll存在,则通过附加DLLEXISTS重新定义常量"
现在你应该可以做了
#if DLLEXISTS
// your stuff here
#endif
您可能需要摆弄EXISTS表达式来找到合适的相对路径。
不,您不能这样做。不能在编译时定义条件编译符号的结果。
如果你想得到幻想,你可以写一个新程序来检测丢失的程序集并修改你的源代码。然后,您可以在项目的预构建事件中执行此程序。
对源文件的修改可以简单地添加或删除源文件顶部建议的#define。