Я пытался найти ответ на свой вопрос и не смог его найти;следовательно, я поставлю решение здесь.Я надеюсь, что это полезно для других.
Проблема:
Я хочу, чтобы мой проект Wix был встроен в процесс сборки TFS 2010.Как часть этого, я хочу, чтобы местоположение исходных файлов для моего Wix указывало на расположение сборки TFS.Например, я хочу, чтобы:
<File Id="ABC" KeyPath="yes" source="C:\Builds\1\MyBuild\assembly.dll" />
было:
<File Id="ABC" KeyPath="yes" source="$(var.TFSLOCATION)\assembly.dll" />
TFSLOCATION - это свойство wix, которое необходимо заполнить местоположением сборки TFS.Это должно произойти во время процесса сборки, когда путь расположения сборки передается в проект Wix.
Решение:
Я прочитал следующую статью:
http://www.ageektrapped.com/blog/setting-properties-for-wix-in-msbuild/
Вот что я сделал с файлом проекта Wix (wixproj):
Чтобы установить свойство wix из процесса TFS MSBuild, файл проекта wix требует два изменения:
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<ProductVersion>3.5</ProductVersion>
<SourceLocation Condition="'$(SourceLocation)' == '' ">UNKNOWN</SourceLocation>
<ProjectGuid>{cae7e273-2de5-4a60-9c4f-9da5f094caf5}</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion>
<OutputName>N4S.MSO.BAM.Installer</OutputName>
<OutputType>Package</OutputType>
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
<SccProjectName>SAK</SccProjectName>
<SccProvider>SAK</SccProvider>
<SccAuxPath>SAK</SccAuxPath>
<SccLocalPath>SAK</SccLocalPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<OutputPath>bin\$(Configuration)\</OutputPath>
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
<DefineConstants>LOCATION=$(SourceLocation)</DefineConstants>
</PropertyGroup>
В приведенном выше xml обратите внимание на следующие две строки:
<SourceLocation Condition="'$(SourceLocation)' == '' ">UNKNOWN</SourceLocation>
<DefineConstants>LOCATION=$(SourceLocation)</DefineConstants>
В первой строке указывается свойство SourceLocation и устанавливается значение по умолчанию UNKNOWN., если установлено значение , а не .Вторая строка определяет константу с именем «LOCATION» в конфигурации «Release».Значение этой константы устанавливается равным значению свойства «SourceLocation».
Теперь вам нужно внести следующие изменения в ваш файл Product.wxs (или как бы там ни было имя вашего файла wxs).
- Сначала определите свойство wix.
<?define TFSLOCATION="$(var.LOCATION)"?>
- Теперь обновите элементы файла.
<File Id="ABC" KeyPath="yes" source="$(var.TFSLOCATION)\assembly.dll" />
TFSИзменение шаблона сборки 2010
- Откройте шаблон сборки TFS 2010.
- Найдите задачу «Запустить MSBuild for Project».
- Откройте свойства этой задачи иперейдите к свойству 'CommandLineArguments'.
- Установите для этого свойства значение:
String.Format("/p:SourceLocation={0}", BinariesDirectory)
Done
Теперь у вас есть свойство wix, заполненное из вашей TFSпроцесс сборки.