Можно ли добавить ссылку в проект C # в зависимости от значения условного символа компиляции (константа препроцессора)? - PullRequest
4 голосов
/ 15 октября 2010

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

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

Ответы [ 3 ]

7 голосов
/ 15 октября 2010

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

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

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


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

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

2 голосов
/ 22 февраля 2016

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

<Reference Include="yourdll" Condition="$(DefineConstants.Contains('UNITY'))">
1 голос
/ 15 октября 2010

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

...