如果程序集存在,则 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 表达式来找到合适的相对路径。