Можно ли добавить ссылку в проект C# в зависимости от значения символа условной компиляции (константы препроцессора)?

Я разрабатываю библиотеку, которую можно скомпилировать для двух разных технологий. По сути, пользователи библиотеки должны иметь возможность скомпилировать решение либо для игрового движка Unity3D, либо для игровой движок NeoAxis. Проблема в следующем: пока библиотека готова к условной компиляции (#if UNITY с использованием ... #endif и т.д.), я не могу найти способ включить набор ссылок или другое в зависимости от символов условной компиляции .

Возможно ли это сделать? Если да, то как?


person tunnuz    schedule 15.10.2010    source источник


Ответы (3)


Да, но вы должны сделать это в файле msbuild .csproj. Этот файл, по сути, представляет собой просто список данных, таких как ссылки.

Что вы делаете, так это добавляете оператор Condition к обеим ссылкам.

<Reference ..a.. Condition="'$LibToUse' =='NeoAxis'" />


<Reference ..b.. Condition="'$LibToUse' =='Unitv3D'" />

Затем просто определите переменную командной строки с именем LibToUse с желаемым значением.

person Preet Sangha    schedule 15.10.2010

Как добавить ссылку с помощью символа условной компиляции только так, как вы это делаете в коде. т.е. наличие или отсутствие установки, например, UNITY в настройках проекта отвечает в это сообщение, и это просто делается путем редактирования файла .csproj, добавления условия к ссылке и вызова метода DefineConstants.Contains() следующим образом:

<Reference Include="yourdll" Condition="$(DefineConstants.Contains('UNITY'))">
person jsmars    schedule 22.02.2016

Идите вперед и добавьте все необходимые ссылки. Они будут автоматически удалены компилятором, если они никогда не использовались в вашем коде, что будет иметь место благодаря #if/#endif. Другая возможность состоит в том, чтобы предоставить два разных файла .sln, ссылающихся на два разных файла .csproj, указывающих на один и тот же исходный код, но разные ссылки. Этим занимаются многие проекты: SomeProject_VS2008.sln и SomeProject_VS2010.sln.

person Darin Dimitrov    schedule 15.10.2010
comment
Использование нескольких файлов csproj нарушает принцип DRY, вызывая множество головных болей при обслуживании en.wikipedia.org/wiki/Don% 27t_repeat_yourself - person nuzzolilo; 04.04.2016