如果程序集存在,则 C# 条件编译
C# conditional compilation if assembly exists
我有一个项目,其中的参考可能存在也可能不存在。我有使用该引用的代码,我只想在程序集存在时编译它。我在想一些事情:
#if ASSEMBLY_EXISTS
AssemblyClass.DoSomething();
#endif
我可以在顶部放置一个#define 并根据需要放置comment/uncomment,但我更希望它能以某种方式知道 是否在没有我的手册的情况下干预,这让我相信 #if 不适用于这种情况。是否有另一种方法可以根据程序集是否存在进行条件编译?
不,你不能这样做。
您不能在编译时定义条件编译符号的结果。
如果你想变得更有趣,你可以编写一个新程序来检测丢失的程序集并修改你的源代码。然后,您可以在项目的 Pre-build 事件中执行此程序。
源代码的修改可能只是在源文件顶部添加或删除您建议的#define。
也许可以在 MSBUILD 中使用条件;
看起来像这样
<PropertyGroup>
<DefineConstants Condition="Exists('my.dll') ">$(DefineConstants);DLLEXISTS</DefineConstants>
</PropertyGroup>
并且应该在您的 .csproj 文件中走得很远。
粗略地读作 "redefine the constants by appending DLLEXISTS, if my.dll exists"
现在你应该可以做到了
#if DLLEXISTS
// your stuff here
#endif
您可能需要 fiddle 使用 EXISTS 表达式来找到合适的相对路径。
我有一个项目,其中的参考可能存在也可能不存在。我有使用该引用的代码,我只想在程序集存在时编译它。我在想一些事情:
#if ASSEMBLY_EXISTS
AssemblyClass.DoSomething();
#endif
我可以在顶部放置一个#define 并根据需要放置comment/uncomment,但我更希望它能以某种方式知道 是否在没有我的手册的情况下干预,这让我相信 #if 不适用于这种情况。是否有另一种方法可以根据程序集是否存在进行条件编译?
不,你不能这样做。 您不能在编译时定义条件编译符号的结果。
如果你想变得更有趣,你可以编写一个新程序来检测丢失的程序集并修改你的源代码。然后,您可以在项目的 Pre-build 事件中执行此程序。
源代码的修改可能只是在源文件顶部添加或删除您建议的#define。
也许可以在 MSBUILD 中使用条件;
看起来像这样
<PropertyGroup>
<DefineConstants Condition="Exists('my.dll') ">$(DefineConstants);DLLEXISTS</DefineConstants>
</PropertyGroup>
并且应该在您的 .csproj 文件中走得很远。
粗略地读作 "redefine the constants by appending DLLEXISTS, if my.dll exists"
现在你应该可以做到了
#if DLLEXISTS
// your stuff here
#endif
您可能需要 fiddle 使用 EXISTS 表达式来找到合适的相对路径。