如果汇编存在,则为C#条件编译

时间:2015-12-03 16:52:01

标签: c# conditional-compilation

我有一个项目,其中包含可能存在或可能不存在的引用。我有使用该引用的代码,我只想在程序集存在时编译它。我正在思考以下几点:

#if ASSEMBLY_EXISTS
    AssemblyClass.DoSomething();
#endif

我可以将#define放在顶部并根据需要发表评论/取消评论,但我更喜欢它是否可以某种方式知道如果它没有我的人工干预这让我相信#if不会为这种情况而工作。是否存在另一种基于程序集是否存在而有条件地编译的方法?

2 个答案:

答案 0 :(得分:5)

也许用MSBUILD中的条件来做;

它看起来像它

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

并且应该在你的.csproj文件中走得很远。

粗略地读取&#34;通过附加DLLEXISTS重新定义常量,如果my.dll存在&#34;

现在你应该能够做到

#if DLLEXISTS
    // your stuff here
#endif

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

答案 1 :(得分:1)

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

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

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