2013-07-31 5 views
1

У меня есть Проект A, который будет использоваться в качестве ссылки в Проект B.условный редакторBrowsable by web.config AppSettings

Проект А имеет класс с методом, который должен быть либо видимым или нет в зависимости от состояния, указанного в проекте B. Скажем, метод будет виден, если в web.config appSettings проекта B появился ключ «DisplayMethod» со значением «true».

Это больше контроль версий. Я не хочу создавать отдельную dll для новой версии проекта A. Я бы хотел, чтобы одна dll могла поддерживать как старую, так и новую версию. Таким образом, разработчик Project B может легко переключать версию в web.config, перестраивать проект, и он хорош.

Ограничения

  • У меня нет контроля над проектом B. Я могу только попросить разработчика Project B для простой модификации как модификации web.config.
  • Я понятия не имею, какие проекты будут использовать Project A. Project A - проект с открытым исходным кодом и может использоваться кем-либо, возможно, в тысячах проектов.

Под "метод был бы виден" Я имею в виду ту же функциональность, как следующий код будет делать:

[EditorBrowsable(EditorBrowsableState.Never)] 
public string SomeMethod(string s) 
{ 
    return "Hello " + s; 
} 

исследований до сих пор:

Я видел this question. Однако принятый ответ на него не работает для меня, поскольку условная константа может быть задана только в свойствах проекта того же проекта, где находится метод.

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

ответ

0

Значения атрибутов должны быть известны компилятору во время компиляции. поэтому то, что вы хотите достичь, невозможно. im не эксперт об этом, но возможно Mono Cecil способен на это. хотя я не уверен, что это того стоит.

+0

Я понимаю это, и я действительно ожидал «невозможного» ответа. Просто, чтобы дать ему попробовать – Dmitry

0

Если «видимый» означает «только доступный», то вы можете использовать friend assemblies. Он позволяет другим методам/свойствам доступа к сборке/полям и т. Д., Которые отмечены как внутренние.

Для того, чтобы это сработало, вам необходимо объявить, что B является другом A во время компиляции.

+0

Я должен был указать его в вопросе ... У меня нет контроля над проектом B. Я могу попросить разработчика Project B простую модификацию, такую ​​как модификация web.config. Использование сборки друзей связано немного больше, чем я могу спросить. – Dmitry

+0

Это должно быть выполнимо, я понимаю, что B будет ссылаться на A, правильно? Если у вас есть контроль над A, то в A вы заявляете, что B является сборкой друзей. Никаких изменений не нужно делать с B. –

+0

Опять же, я должен был быть более ясным, извините. Я понятия не имею, какие проекты будут использовать Project A. Project A - проект с открытым исходным кодом и может использоваться кем угодно, потенциально в тысячах проектов. – Dmitry

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