2013-09-27 5 views
1

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

Итак, как бы вы это сделали?

Я думал, может быть, я мог бы использовать Директивы Препроцессора, но, честно говоря, у меня мало опыта с ними и, похоже, не могу найти, как это сделать.

EDIT:

Только что узнал, подобный вопрос уже был задан: Checking for the existence a reference/type at compile time in .NET (На самом деле я искал, прежде чем отправлять, но как-то пропустил это)

Но не кажется, быть удовлетворительным ответом.

Действительно ли нет способа сделать это?

Edit2: Извините за не уточняя это раньше, но код, который я написал для использования в проекте Unity3D, это куча скриптов в принципе.

+2

Итак, если у вас есть код в вашем приложении, то зачем полагаться на существование этой библиотеки в первую очередь? – nuke

+0

@Stef проверить это http://stackoverflow.com/questions/528492/how-can-i-check-if-a-library-dll-is-available-in-c это то, о чем вы говорите? –

+0

Я беру это из «Не существует ли способа сделать это?» комментарий добавил после того, как я отправил ответ, что это не решение, которое вы ищете? Любой шанс получить обратную связь о том, почему, если это так? Благодарю. –

ответ

0

Давайте предположим, что ваш проект называется A:

  1. Создать новый проект, B, а затем добавить источники файлов от А до В (см http://blogs.msdn.com/b/saraford/archive/2008/11/26/did-you-know-how-to-add-a-linked-item-to-a-project-365.aspx) подробности о том, как это сделать.

  2. В свойствах проекта A в разделе «Сборка» добавить условный символ компиляции, например USE_LIBRARY.

  3. Для каждого исходного файла, использующего библиотеку, изменять с помощью заявления на что-то вроде:

    #if USE_LIBRARY

    с использованием Lib.Xxx

    #else

    с использованием DummyLib. Xxx

    #endif

Затем создайте DummyLib с альтернативным кодом.

Таким образом A.dll будет зависеть от библиотеки, а B.dll не будет. Затем вы можете распространять B.dll без библиотеки.

+0

Спасибо, но я думаю, что должен был быть более тщательным. В моем вопросе. Код, который я написал, это скрипты в Unity3D, поэтому я не знаю, как это сделать, или если это возможно. – Stef

+0

Какая IDE вы используете, или просто используете текстовый редактор и компилируете в командной строке? Символы условной компиляции и директивы pre-process #if и etc - это функции компилятора C#, а не только Visual Studio. Таким образом, вы можете сделать то же, что описано выше. Как вы это сделаете, это зависит от ОС, IDE и т. Д., Которые вы используете. –

+0

Я использую Visual Studio 2010 для написания всего, но Unity компилирует все это. (Unity - игровой движок и редактор). Дело в том, что я хотел просто поделиться своими сценариями с другими, используя Unity's Asset Store, но Unity не позволяет обмениваться ничем с той библиотекой, которую я использовал, поэтому я хотел, чтобы эти скрипты работали независимо от того, существует ли эта библиотека (но все еще используя его, если он это делает). Поэтому я не могу использовать ваше решение, поскольку он просто должен работать, добавляя мои сценарии в другой проект, не меняя никаких свойств проекта. – Stef

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

  • Нет связанных вопросов^_^