Переместить каталог промежуточных объектов в проектах C # в Visual Studio - PullRequest
15 голосов
/ 02 мая 2009

Сейчас я нахожусь в процессе демонтажа, рефакторинга и очистки решения Visual Studio среднего размера (15 проектов). Решение содержит проекты на C ++ и C #.

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

Результат, который я хотел бы получить, следующий:

SolutionDir/
SolutionDir/src/project1/{ Code here }
SolutionDir/int/project1/configuration/{.obj files and other misc compiler junk here}
SolutionDir/bin/project1/configuration/{The fun stuff goes here}

Это кажется тривиальным с C ++ проектами, так как вы можете указать как выходной, так и промежуточный каталог. Однако в C #, по крайней мере, через пользовательский интерфейс Visual Studio 2008 кажется невозможным переместить каталог obj?

После некоторых копаний я добавил

<IntermediateOutputPath>..\..\int\ProjectName\Debug\</IntermediateOutputPath>

к C # .csproj

Это похоже на работу, вроде. Это правда, что промежуточные объекты, по-видимому, заканчиваются там, но каталог 'obj' и под ним каталог конфигурации (например, 'debug'), а затем каталог 'TempPE' создаются в старом месте - все они пусты.

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

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

Ответы [ 3 ]

8 голосов
/ 30 декабря 2011

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

<IntermediateOutputPath>Assembly\obj\Debug\</IntermediateOutputPath>
<BaseIntermediateOutputPath>Assembly\obj\Debug\</BaseIntermediateOutputPath>

SVN / SCC игнорировать свойства также полезны при желании

1 голос
/ 22 февраля 2010

Я сам искал решение этой проблемы и придумал что-то менее навязчивое.

Создайте где-нибудь файл bat с именем «CleanSrcDir.bat» (я поместил мой в путь к моему проекту) со следующим содержанием:

rmdir /S /Q %1obj
SET %ERRORLEVEL%=0

После этого добавьте что-то похожее на события после сборки проекта C #:

$(ProjectDir)CleanSrcDir.bat $(ProjectDir)

(Разумеется, предполагается, что вы поместили свой bat-файл в каталог проекта.) Затем измените настройки пост-сборки на «Всегда», и все готово.

Это немного хакерски, но, несомненно, устраняет проблему контроля версий.

1 голос
/ 02 мая 2009

Я бы порекомендовал добавить каталоги, которые вы хотите игнорировать, в свойство игнорирования SVN на один уровень выше. Кроме того, когда вы делаете начальную фиксацию и не добавляете каталоги bin и obje, клиенты SVN не волнуются. С другой стороны, рассмотрите возможность размещения сгенерированных файлов в подкаталоге GeneratedFiles вашего проекта и не проверяйте этот каталог в SVN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...