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