Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#条件编译(如果程序集存在)_C#_Conditional Compilation - Fatal编程技术网

C#条件编译(如果程序集存在)

C#条件编译(如果程序集存在),c#,conditional-compilation,C#,Conditional Compilation,我有一个项目的参考,可能存在,也可能不存在。我有使用该引用的代码,我只想在程序集存在时编译它。我的想法大致如下: #if ASSEMBLY_EXISTS AssemblyClass.DoSomething(); #endif 我可以在顶部放一个#define并根据需要进行注释/取消注释,但我更希望它能在没有我手动干预的情况下知道它是否在那里,这让我相信#if在这种情况下不起作用。是否有其他方法可以根据程序集是否存在进行有条件编译?否您不能这样做。 不能在编译时定义条件编译符号的结果 如

我有一个项目的参考,可能存在,也可能不存在。我有使用该引用的代码,我只想在程序集存在时编译它。我的想法大致如下:

#if ASSEMBLY_EXISTS
    AssemblyClass.DoSomething();
#endif
我可以在顶部放一个#define并根据需要进行注释/取消注释,但我更希望它能在没有我手动干预的情况下知道它是否在那里,这让我相信#if在这种情况下不起作用。是否有其他方法可以根据程序集是否存在进行有条件编译?

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

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


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

可以使用MSBUILD中的条件执行此操作

它看起来有点像

<PropertyGroup>
     <DefineConstants Condition="Exists('my.dll') ">$(DefineConstants);DLLEXISTS</DefineConstants>
</PropertyGroup>

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

最后,尝试,捕获?我假设您会得到一个对象引用。没有设置为对象异常的实例,所以有一个特定的catch块来处理该异常。这不是一个非常有效的方法,但我不知道这段代码需要快速。@stuartd,这不是运行时的链接检查吗?没有可用于存在引用程序集的预编译符号。@TTT oops,是的。@j-u-s-t-i-n-如果程序集不在那里,代码将无法编译。我喜欢你的“变得花哨”想法。这显然是可行的,如果没有更简单的方法,这似乎是一个很好的退路。对于Exists目录,由于引用包含在项目中,所以我只复制了它的路径。效果很好!MsBuild/.csproj文件可以通过卸载项目并右键单击它,然后单击“编辑”来访问。。。
#if DLLEXISTS
    // your stuff here
#endif