Как настроить MSBuild с именем Project.dll вместо od Project.vcxproj.dll в TeamCity? - PullRequest
3 голосов
/ 27 марта 2012

У меня проблема при использовании механизма сборки TeamCity для автоматизации.Мне нужно собрать много vcxprojects, некоторые из них - LIB или DLL, а остальные - файлы EXE, использующие ранее созданные LIB.

Пример настройки одного проекта LIB в TeamCity:

    <runner id="RUNNER_15" name="MP3" type="MSBuild">
      <parameters>
        <param name="build-file-path" value="Audio\mp3\mp3.vcxproj" />
        <param name="dotNetCoverage.NCover.HTMLReport.File.Sort" value="0" />
        <param name="dotNetCoverage.NCover.HTMLReport.File.Type" value="1" />
        <param name="dotNetCoverage.NCover.Reg" value="selected" />
        <param name="dotNetCoverage.NCover.platformBitness" value="x86" />
        <param name="dotNetCoverage.NCover.platformVersion" value="v2.0" />
        <param name="dotNetCoverage.NCover3.Reg" value="selected" />
        <param name="dotNetCoverage.NCover3.args" value="//ias .*" />
        <param name="dotNetCoverage.NCover3.platformBitness" value="x86" />
        <param name="dotNetCoverage.NCover3.platformVersion" value="v2.0" />
        <param name="dotNetCoverage.NCover3.reporter.executable.args" value="//or FullCoverageReport:Html:{teamcity.report.path}" />
        <param name="dotNetCoverage.PartCover.Reg" value="selected" />
        <param name="dotNetCoverage.PartCover.includes" value="[*]*" />
        <param name="dotNetCoverage.PartCover.platformBitness" value="x86" />
        <param name="dotNetCoverage.PartCover.platformVersion" value="v2.0" />
        <param name="msbuild_version" value="4.0" />
        <param name="run-platform" value="x86" />
        <param name="toolsVersion" value="4.0" />
      </parameters>
    </runner>

В случае DLL настройка компоновщика в файле vcxproj гласит:. \ Release \ $ (ProjectName) .dll В случае LIB такой настройки нет вообще.

Когда я собираю ее с помощью командной строки VS2010,вывод . \ Release \ mp3.dll или . \ Release \ mp3.lib .

Но когда я использую TC, я получу вывод . \ Release \ mp3.vcxproj.dll или . \ Release \ mp3.vcxproj.lib

Почему?Как избежать этого странного поведения?(Я не хочу заменять строку в файле vcxproj, например. \ Release \ mp3.dll, это проблема многих проектов, и я бы хотел избежать этого примитивного решения, а в случае проектов LIB такой возможности нет вообще)

Спасибо за любой ответ.

Ответы [ 2 ]

1 голос
/ 02 октября 2013

У меня была такая же проблема с появлением .vcxproj в имени файла моих двоичных файлов.Я сузил его до переменной $ (ProjectName), которая при сборке с TeamCity отличалась от переменной, когда я создавал ее на своем собственном компьютере.

Для меня решение было определить переменную ProjectName в каждом из затронутых файлов проекта(странно, что это не происходило в некоторых типах проектов, например, в статических библиотеках).

<!-- Define project name to avoid TeamCity from generating incorrect one -->
<PropertyGroup>
    <ProjectName>NAME_OF_PROJECT</ProjectName>
</PropertyGroup>

Я поместил это ниже строка и выше определения, которые ссылаются на него.

Я до сих пор не понимаю, почему TeamCity отличается ... Надеюсь, это поможет другим с той же проблемой.

0 голосов
/ 12 февраля 2015

Вот обходной путь для этой проблемы, который не требует изменения чего-либо в файлах проекта. Перед вызовом любой сборки проекта выполняется скрипт, который переименует все .vcxproj интересующие файлы в файлы с тем же именем, но без расширения .vcxproj. Это бегун «Командная строка» и сценарий

for /r directory\with_projects %%%%f in (*.vcxproj) do rename %%%%f %%%%~nf

Тогда бегун Visual Studio имеет переименованные файлы проекта в качестве аргументов. Внутри бегун делает копию с расширением .teamcity, которое, в свою очередь, обрезается Visual Studio, давая правильное значение $(ProjectName).

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