Условная компиляция целых пространств имен-C#


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

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

4 9

4 ответа:

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

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

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

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

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

Но, вероятно, проще украсить файлы непосредственно ; - p

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

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

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

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

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

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

<ItemGroup>
  <Compile Include=".\SomePath\*.cs" />
</ItemGroup>