1

Тема: Якщо ви хочете, щоб ваша тека obj не загромаджувала ваше дерево сирців

Якщо ви хочете, щоб ваша тека obj не загромаджувала ваше дерево сирців, то ви потрібно встановити проміжну теку для збирання проекту. Це можна зробити додавши по два наступних рядки у csproj файл:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    ...
    <BaseIntermediateOutputPath>..\..\Temp\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
    <IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    ...
    <BaseIntermediateOutputPath>..\..\Temp\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
    <IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
</PropertyGroup>

Це дуже зручно, особливо якщо у вас декілька проектів, ви можете одним разом видалити теку Temp і так почисти усі білди. Також раджу налаштувати Properties -> Build -> Output path для всіх проектів.

Змінна $(MSBuildProjectName) повертає ім'я проекту.

Подякували: truesupport1

2

Re: Якщо ви хочете, щоб ваша тека obj не загромаджувала ваше дерево сирців

Коли почали, то вже пояснюйте. Де у нас тека obj, і чому вона повинна щось загромаджувати.
Чим не влаштовує in Solution Explorer: right mouse click on Solution -> Clean Solution, щоб почистити?

3 Востаннє редагувалося Yola (03.07.2015 17:19:01)

Re: Якщо ви хочете, щоб ваша тека obj не загромаджувала ваше дерево сирців

У тій самій теці де лежить файл csproj є дві підтеки obj і bin. Окрім них там ще купа тек із файлами проекту. Вони плутаються. Тому доречно перенести ці теки в інші місця. Особливо це зручно коли в солюшені багато проектів. Тоді всі бібліотеки у теку Libs, а виконувані у Bin, проміжні (obj) у Temp.

Принагідно скажу, що за потреби можна й назву виконуваних файлів і бібліотек зробити різною для реліза і дебага. Ось такою зміною у csproj:

<AssemblyName>MyApp_$(Configuration)</AssemblyName>

У C++ проектах це все можна зробити через IDE.

4

Re: Якщо ви хочете, щоб ваша тека obj не загромаджувала ваше дерево сирців

Шановний Yola, а чи не знається вам, що ви воюєте з млинами :) ?

Подякували: quez1

5 Востаннє редагувалося Yola (04.07.2015 07:00:59)

Re: Якщо ви хочете, щоб ваша тека obj не загромаджувала ваше дерево сирців

bees написав:

Шановний Yola, а чи не знається вам, що ви воюєте з млинами :) ?

Важко відповісти на такий закид, будь ласка, конкретніше.

6

Re: Якщо ви хочете, щоб ваша тека obj не загромаджувала ваше дерево сирців

саме тому мені подобаються make файли, де задав ключ make cleanobj і очистяться обєктні файли.
Які від них можуть бути проблеми, є але не завжди, коли перебрав програму, а залишився старий обєктний файл, і можуть бути проблеми і глюки.

7

Re: Якщо ви хочете, щоб ваша тека obj не загромаджувала ваше дерево сирців

уявіть, що ваш солюшн містить 20 проектів серед яких виконувані файли, бібліотеки тощо. Вам треба віддати його користувачу або тестеру. Якщо у вас не налаштовано компіляція так, щоб зберігати усі результовні файли в одній теці, як ви віддасте на тестування? Та й якщо вам потрібно архівувати або додати соурс контрол, то набагато легше почистити проект просто видаливши теку Temp, чи вказати її як виняток для соурс контрола. Я знаю, що соурс контроли розумні і самі можуть вибрати файли які непотрібно включати, але все ж.

8

Re: Якщо ви хочете, щоб ваша тека obj не загромаджувала ваше дерево сирців

Yola написав:

уявіть, що ваш солюшн містить 20 проектів серед яких виконувані файли, бібліотеки тощо. Вам треба віддати його користувачу або тестеру. Якщо у вас не налаштовано компіляція так, щоб зберігати усі результовні файли в одній теці, як ви віддасте на тестування? Та й якщо вам потрібно архівувати або додати соурс контрол, то набагато легше почистити проект просто видаливши теку Temp, чи вказати її як виняток для соурс контрола. Я знаю, що соурс контроли розумні і самі можуть вибрати файли які непотрібно включати, але все ж.

Мені, наприклад, не треба уявляти, бо це - моє повсякдення.
Цікаво також Ваше висловлювання "... вам потрібно ... додати соурс контрол...". Звучить якби Ви собі можете уявити солушн з 20 проектів, які розробляються без застосування source control. Тоді як, дозвольте поцікавитись?
Я звик, що для будь-якої розробки починаючи від першого більш-менш вдалого прототипу увесь код зберігається в source control, і тільки так. Крім того, якщо мова - про Visual Studio, то там є одна дуже цікава річ. Клікніть на File->New->Rroject(або просто Ctrl+Shift+N)->Other Project Types->Setup and Deployment, і подивіться що там можна знайти. Багато корисного побачите.
Для будування релізів виділяється компьютер, пишеться інструкція (обов'язково!), як будувати реліз, і людина діє згідно цого документу: check out солушн робить build, в результаті якого одержує щось, що можна install на цільову машину (-ни), там тестує, якщо все ґаразд, пише release notes і відправляє все це замовнику.
Колупання руками в файлах солушна та проектів - то хибний підхід.

9

Re: Якщо ви хочете, щоб ваша тека obj не загромаджувала ваше дерево сирців

Соурс контрол я навів для прикладу, що воно дає, я ніде не сказав, що треба дожити до 20 проектів, а потім покласти їх в соурс контрол.

А якщо обійтись без деплоймент проекта і окремої людина, а все одразу писати куди треба. На моєму попередньому проекті (він був на С++) так і робили і вели цей проект боги програмування із Франції. Вважаю запропонований мною підхід підхожим у деяких ситуаціях, а ваш у інших. Не кожному проекту потрібен інсталятор.

І чи ви не згодні, що краще не мати теки bin і obj у дереві сирців проекта?

10 Востаннє редагувалося mich_retten (05.07.2015 17:18:32)

Re: Якщо ви хочете, щоб ваша тека obj не загромаджувала ваше дерево сирців

Yola написав:

І чи ви не згодні, що краще не мати теки bin і obj у дереві сирців проекта?

Як Ви помітили, я навіть не зразу збагнув, які теки Ви маєте на увазі. Звідси висновок: вони мене ніколи не хвилювали ні за яких обставин.

- мене останнім часом непокоїть гондурас.
- спробуй його менше чухати