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