如果汇编存在,则为C#条件编译

我有一个项目的参考可能存在,也可能不存在。 我有使用该引用的代码,我只想在程序集存在时编译它。 我正在考虑以下几点:

#if ASSEMBLY_EXISTS AssemblyClass.DoSomething(); #endif 

我可以根据需要将#define放在顶部并注释/取消注释,但我更愿意,如果没有我的手动干预,它可能只是知道它是否在那里,这让我相信#if不适用于这种情况。 是否存在另一种基于程序集是否存在而有条件地编译的方法?

也许用MSBUILD中的条件来做;

它看起来像它

  $(DefineConstants);DLLEXISTS  

并且应该在你的.csproj文件中走得很远。

这大致读作“通过附加DLLEXISTS重新定义常量,如果my.dll存在”

现在你应该可以做到

 #if DLLEXISTS // your stuff here #endif 

您可能需要摆弄EXISTS表达式以找到合适的相对路径。

不,你不能这样做。 您无法在编译时定义条件编译符号的结果。

如果你想得到想象,你可以编写一个新程序来检测丢失的程序集并修改你的源代码。 然后,您可以在项目的预构建事件中执行此程序。

修改源代码可能只是在源文件的顶部添加或删除建议的#define。