Условно компилировать целые пространства имен - C # - PullRequest
9 голосов
/ 07 апреля 2010

Мне было интересно, есть ли способ условно компилировать целые пространства имен в C #.Или я остался с необходимостью явно декорировать каждый исходный файл в пространстве имен директивами препроцессора, чтобы исключить его?В под-версиях моего приложения код в различных пространствах имен просто не требуется, и я бы хотел, чтобы его исключили.

Заранее спасибо!

Ответы [ 4 ]

4 голосов
/ 07 апреля 2010

Если ваше пространство имен находится в отдельной сборке, которая не содержит ничего другого, вы можете использовать Configuration Manager для вашей конкретной подверсии и снять флажок «Сборка».

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

1 голос
/ 13 июня 2011

У меня была та же проблема, и использование директив в каждом файле в конечном итоге стало слишком большой работой; поэтому я начал использовать условные теги в файле .csproj.

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

<ItemGroup Condition=" '$(SlimBuild)' != 'true' ">
...
</ItemGroup>

... и вызовите msbuild.exe с соответствующим параметром свойства.

MSBuild.exe MyApp.msbuild /p:Configuration=Release /p:SlimBuild=true

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

<ItemGroup>
  <Compile Include=".\SomePath\*.cs" />
</ItemGroup>
1 голос
/ 07 апреля 2010

Вы можете сделать это, украшая каждый файл, или вы можете сделать это, выбрав, какие файлы включить.И MSBuild, и csc имеют опции для включения всех файлов в путь, а MSBuild дополнительно имеет возможность условно включать элементы сборки на основе атрибута (вместо того, чтобы требовать отдельного csproj для конфигурации).проще декорировать файлы напрямую; -p

1 голос
/ 07 апреля 2010

Вам потребуется поместить директиву условной компиляции в каждый файл. Нет способа пометить все пространство имен как условно скомпилированное.

Как Майкл отмечает в своем ответе , возможное решение состоит в том, чтобы разбить условный код на отдельный проект (сборку) и отправить эту сборку только для конфигураций, для которых она требуется; но это будет зависеть от характера условного кода.

...