В 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, что угодно, в другую папку в событии после сборки. (Вкладка "События" в свойствах проекта)