Компилятор C #: только препроцесс - PullRequest
1 голос
/ 13 апреля 2011

Я планирую распространить SubSpec (небольшое расширение BDD для xUnit, которое помещается в <600 строк) в виде одного файла .cs вместо полноценного dll. </p>

SubSpec имеетSilverlight и версия .NET, было бы идеальным для создания релизных версий SubSpec из одного мастер-файла, используя его в препроцессоре CSC.Под «версией выпуска» я подразумеваю создание этого единственного файла cs (не будет никаких бинарных выпусков).Управление версиями будет осуществляться NuGet.

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

Ответы [ 3 ]

4 голосов
/ 13 апреля 2011

Вы всегда можете просто запустить его через препроцессор C ++ через cl /E /P, и вы уже гарантированно установите его (почти) при каждой установке VS.Это очень старая уловка:)

// SubSpec.cs
// Bla bla license stuff

#include "File1.cs"  // This gets read by the C++ preprocessor
#include "File2.cs"  // and expanded out
#include "File3.cs"
1 голос
/ 14 апреля 2011

Ваш tools/install.ps1 может делать то, что он хочет с файлом C #, так как он «установлен», чтобы он мог обрабатывать его во время включения - это может быть либо с использованием встроенных элементов $(x) или $(expression) в многострочном режиме строка, которая расширяется условно (возможно, имея набор function s, который расширяется до кода C # как [string] s, формируя компоненты выражения), т. е. шаблонизируя, или вы можете передать Get-Content через некоторые -replace s , (Вероятно, вы увидите примеры людей, использующих T4 для этого, но если NuGet - это грузовик для доставки, стыдно не использовать его. Если вы чувствуете себя предприимчивым, вы можете сделать настоящий парсер (или просто там тоже бедняк)

Другим способом может быть использование partial классов и предоставление слота install.ps1 в правом файле настройщика рядом с основным.

Или же вы просто не пытались достаточно усердно, чтобы оптимизировали свои #ifdef SILVERLIGHT s , используя подобные трюки, чтобы вернуться на лошадь .

0 голосов
/ 13 апреля 2011

Почему бы просто не добавить файл .cs в проект, где он требуется?

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

...