2015-12-03 3 views
2

У меня есть проект со ссылкой, которая может или не может существовать. У меня есть код, который использует эту ссылку, и я хотел бы скомпилировать его, только если сборка существует. Я имею в виду что-то вдоль линий:C# условная сборка если сборка существует

#if ASSEMBLY_EXISTS 
    AssemblyClass.DoSomething(); 
#endif 

Я мог бы поставить #define сверху и комментировать/раскомментировать по мере необходимости, но я бы предпочел, если это может быть просто каким-то образом знать если он там без мое ручное вмешательство, которое заставляет меня поверить, что #if не будет работать для этой ситуации. Есть ли другой способ условной компиляции на основе того, существует ли сборка?

+0

Попробуйте, поймайте, наконец? Я предполагаю, что вы получите объект ref. не устанавливаются в экземпляр исключения объекта, поэтому у вас есть определенный блок catch для обработки и т. д. Не очень эффективный подход, но я не знаю, что этот код требуется быстро. –

+0

@stuartd, разве это не проверка ссылок во время выполнения? – TTT

+0

Нет символа предварительной компиляции, который вы можете использовать для существования ссылочной сборки. –

ответ

5

Возможно сделать это с условием внутри MSBUILD;

Это будет выглядеть, как это

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

и должны идти довольно далеко вниз в файле .csproj.

Это читает, грубо говоря, как «переопределять константы путем добавления DLLEXISTS, если my.dll существует»

Теперь вы должны быть в состоянии сделать

#if DLLEXISTS 
    // your stuff here 
#endif 

Вам может понадобиться возиться с EXISTS, чтобы найти соответствующий относительный путь.

+0

Это сработало отлично. Для каталога Exists, так как ссылка включена в проект, я просто скопировал ее путь точно. – TTT

+0

Работает хорошо! Файл MsBuild/.csproj можно получить, выгрузив проект и щелкнув правой кнопкой мыши, затем нажмите «Изменить» ... http://doc.postsharp.net/configuration-msbuild – Zunair

1

Нет, вы не можете этого сделать. Вы не можете определить результат условного символа компиляции во время компиляции.

Если вы хотите получить фантазию, вы можете написать новую программу, которая обнаруживает недостающую сборку и изменяет ваш источник. Затем вы можете выполнить эту программу в событии Pre-build вашего проекта.

Модификация источника может быть просто добавлением или удалением предложенного #define в верхней части исходных файлов.

+0

Мне нравится ваша идея «получить фантазию».Очевидно, что это работает и кажется хорошим резервным, если нет более простого способа. – TTT

Смежные вопросы