Как заставить Visual Studio 2010 передавать переменную в MSBuild? - PullRequest
3 голосов
/ 04 января 2012

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

$> msbuild / p: DestServer = \ myserver \ final-dest

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

Вот моя проблема - мне бы очень хотелось, чтобы мне не приходилось выдавать ее из командной строки. Когда я выбираю конфигурацию сборки выпуска (Project | Properties | Build), я хотел бы иметь возможность указать / p: DestServer = \ myserver \ final-dest в качестве аргумента, что msbuild будет использовать так же, как и его нормальная сборка .

Где мне это указать?

В свойствах проекта | События сборки, я мог бы указать события до сборки или после сборки, но разве это не «часть сборки»?

В идеале, если бы кто-то мог дать мне последовательность меню в Visual Studio 2010, я был бы признателен.

Ответы [ 2 ]

4 голосов
/ 20 августа 2013

Если вы не хотите редактировать файлы проекта - есть другое решение.

Каждый файл * .csproj содержит следующее: <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />.

На моем компьютере и .Net 4.0этот файл находится в "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets"

Добавить новый PropertyGroup внутри Project как:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
 <PropertyGroup>  
    <DestServer>\myserver\final-dest</DestServer>
  </PropertyGroup>
...
<!-- a lot of stuff -->
...
</Project>

Все ваши сборки сейчас (из MSBuild и Visual Studio) будут использовать это свойство, так что вам не нужно изменять .csproj или передавать аргументы из командной строки

Обновление

Это был быстрый и грязный путь, так какон переопределит все проекты, построенные на этом ПК. Делайте это только в том случае, если проектов много и у вас нет прав для их изменения

Обычно вы просто добавляете новый PropertyGroup в один проект.

Если существует много проектов, в которых вам нужна эта переменная, вы можете создавать и импортировать свои собственные цели расширения ниже цели по умолчанию:

App1.csproj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  <Import Project="..\myCustom.targets" />
...
</Project>

и

myCustom.targets

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>  
    <DestServer>\myserver\final-dest</DestServer>
  </PropertyGroup>
</Project>
1 голос
/ 05 января 2012

Я не знаю, как установить это с помощью графического интерфейса VisualStudio (их вполне может не быть), но вы можете просто отредактировать файл .csproj / .vcproj, чтобы добавить это свойство в соответствующие конфигурации:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>9.0.30729</ProductVersion>
    ...
    ...etc
    ...
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DestServer>\myserver\final-dest</DestServer>   <!-- <<<<< HERE <<<<< -->
    ...

Visual Studio сохранит это, даже если вы измените другие свойства через графический интерфейс (по крайней мере, стремится к ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...