2009-09-29 3 views
10

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

+0

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

+0

Кто-нибудь знает, изменилась ли эта ситуация в Visual Studio 2010/.NET4 ...? –

ответ

0

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

6

Вам необходимо переопределить BaseIntermediateOutputPath msbuild var, подробнее об этом here.

+1

Это работает по большей части, но я искал способ установить его в каждом проекте, поэтому построение из среды IDE не будет загрязнять исходную папку. Однако установка BaseIntermediateOutputPath в проекте вызывает предупреждение о безопасности. Увы, это не представляется возможным. вздох... –

+0

Предупреждение о безопасности должно сообщить вам, что что-то необычное произошло, вы можете отключить предупреждение, и вы не увидите его снова, пока не измените что-то еще. –

+2

нет ничего необычного в настройке промежуточного выходного местоположения. Visual Studio с радостью принимает проекты C++, настраивающие расположение промежуточных файлов (через свойство IntDir) без диалогового окна с предупреждением о безопасности, но при этом он запускает истерику, когда то же самое делается в проекте C#. –

1

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

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

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

echo $(CustomBeforeMicrosoftCSharpTargets) 

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

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

Примечание: в моем случае, там уже папка C:\Program Files (x86)\MSBuild\12.0 но не v12.0 было.

Так (как администратор) я создал папку и положил Custom.Before.Microsoft.CSharp.targets файл, который выглядит следующим образом:

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

Примечание: $(ProjectName) не работает, используйте $(MSBuildProjectName).

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

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

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

+0

Еще одно примечание: вышеупомянутый подход работает для VS CE 2017. 'CustomBeforeMicrosoftCSharpTargets' имеет значение' C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ v15.0', и снова я пришлось создать папку 'v15.0'; никаких изменений, необходимых для XML. –

Смежные вопросы