Установить промежуточную директорию в проекте С#

В VS 2008, есть ли способ установить промежуточный каталог (куда идут файлы .obj, а не конечные цели) в проекте С#?

Ответ 1

Вам нужно переопределить BaseIntermediateOutputPath msbuild var, подробнее об этом здесь.

Ответ 2

Я нашел решение для этого, используя Visual Studio Express 2013; Я забыл, какая версия VS представляет MSBuild, и я не могу точно сказать, что это будет работать для любой другой версии. Но здесь идет:

В C:\Windows\Microsoft.NET\Framework находятся подкаталоги, соответствующие версиям .NET; С VSX2013 в моей системе интересующая папка v4.0.30319. (Это версия .NET, используемая MSBuild, а не та, на которую я нацелен.) Внутри этой папки находятся файлы .targets, которые являются коллекциями правил MSBuild.

В начале Microsoft.CSharp.targets приведены некоторые правила, которые будут импортировать больше файлов правил. Третий из этих операторов импорта импортирует из файла с именем переменной build CustomBeforeMicrosoftCSharpTargets. Возможно, вы сможете определить это имя, прочитав правила, но проще добавить шаг пользовательской сборки

echo $(CustomBeforeMicrosoftCSharpTargets)

Постройте и посмотрите на результат. В моем случае полный путь был

C:\Program Files (x86)\MSBuild\v12.0\Custom.Before.Microsoft.CSharp.targets

ПРИМЕЧАНИЕ. В моем случае уже была папка C:\Program Files (x86)\MSBuild\12.0, но не v12.0.

Итак (как admin) Я создал папку и поместил файл Custom.Before.Microsoft.CSharp.targets, который выглядит так:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <BaseIntermediateOutputPath>$(SolutionDir)\Build\$(MSBuildProjectName)</BaseIntermediateOutputPath>
    </PropertyGroup>
</Project>

ПРИМЕЧАНИЕ: $(ProjectName) не работает, используйте $(MSBuildProjectName).

Когда я построил, OBJ были помещены под каталогом Build под решением, а не под проектом, в подкаталог с типичным соглашением об именах: Debug или Release или x86\Debug или x64\Release.

Это не работало точно так, как вам хотелось: я действительно хотел разместить их в %TEMP%, но переменная не была расширена, поэтому я закончил создание папки в проекте под названием %TEMP%. Размещение расширенного пути в правиле работало нормально, но другие подпапки %APPDATA% не удалось из-за проблем с разрешениями.

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

Ответ 3

Я так не верю. Тем не менее, вы можете скопировать ваши исполняемые файлы, dlls, что угодно, в другую папку в событии после сборки. (Вкладка "События" в свойствах проекта)