库的#if编译指令

时间:2018-05-17 10:36:45

标签: c# conditional-compilation

我正在开发一个可以在不同平台上编译的应用程序。我想在编译时检查一个库是否可用。

基本上,这就是我想做的事情

#if LIBRARY_OK(mylib)
using mylib;
using mylib.subpackage;
#endif

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:1)

  

这个C#应用程序可以在不同的平台上编译。

然后,不是尝试检查库是否可用,而是为要支持的不同平台定义编译符号。例如:

  • 调试(Windows)=> #DEBUG,#TRACE,#LIBRARYX
  • 调试(Android)=> #DEBUG,#TRACE
  • 发布(Windows)=> #LIBRARYX
  • 等等等

然后,你的代码与你的代码基本相同:

#if LIBRARYX
using mylib;
using mylib.subpackage;
#endif

答案 1 :(得分:0)

这将有点奇怪,而且不是很优雅,但它有效。 将此命令放入项目属性中的Pre-build event。以下命令假定您的文件位于根目录中,但您可以修改Program.cs的位置。

if exist C:\ffmpeg (
set IS_LIB_OK=TRUE
)

if %IS_LIB_OK% equ TRUE echo using mylib;  > $(ProjectDir)\Temp.cs & echo using mylib.extension; >> $(ProjectDir)\Temp.cs
type $(ProjectDir)\Program.cs >> $(ProjectDir)\Temp.cs
del $(ProjectDir)\Program.cs
type $(ProjectDir)\Temp.cs > $(ProjectDir)\Program.cs
del  $(ProjectDir)\Temp.cs

这将附加

using mylib;
using mylib.extensions;

如果您的C驱动器中有ffmpeg library,但您可以使用适合您的解决方案的任何批处理命令进行检查。