我需要使用TfvcTemplate.12.xaml,因为它有Pre和Post构建脚本执行支持,我需要运行Powershell脚本作为PreBuild事件。
在TFS 2013上,使用旧的DefaultTemplate.xaml构建Wix项目可以正常工作。在尝试使用新的默认模板构建时,TfvcTemplate.12.xaml构建了csharp项目,但Wix无法找到其文件,而文件存在于同一位置。
这是Wix代码:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?define SourceDir=$(var.OutDir)?>
<?warning **************** Target=$(var.TargetDir) ***********?>
<?warning **************** src=$(var.SourceDir) **************?>
<Product Id="*" Language="1033" Manufacturer="Test" Name="Testing" UpgradeCode="DB7DAC5A-ED29-45E6-8029-89F6486A9ACA" Version="1.0.0.0">
<Package Compressed="yes" InstallerVersion="200" Platform="x64" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="ProgFiles">
<Directory Id="bin" Name="bin">
<Component Id="AddProjToSln.exe" Guid="*">
<File Id="AddProjToSln.exe" KeyPath="yes" Source="$(var.SourceDir)AddProjToSln.exe" />
</Component>
<Component Id="AddProjToSln.exe.config" Guid="*">
<File Id="AddProjToSln.exe.config" KeyPath="yes" Source="$(var.SourceDir)AddProjToSln.exe.config" />
</Component>
</Directory>
</Directory>
</Directory>
<Feature Id="ProductFeature" Level="1" Title="TestFe">
<ComponentGroupRef Id="Testing" />
</Feature>
<Media Id="1" Cabinet="product.cab" EmbedCab="yes" />
</Product>
<Fragment>
<ComponentGroup Id="Testing">
<ComponentRef Id="AddProjToSln.exe" />
<ComponentRef Id="AddProjToSln.exe.config" />
</ComponentGroup>
</Fragment>
</Wix>
以下是TFS的日志:
Build于2014年10月13日下午5:24:15开始。 1&gt;项目&#34; D:\ Builds \ 31 \ 47 \ src \ MyComp \ Playground \ MyUser \ Utilities \ VisualStudio \ AddProjToSln.sln&#34; 在节点1上(默认目标)。 1 GT; ValidateSolutionConfiguration: 构建解决方案配置&#34;调试|任何CPU&#34;。 1&gt;项目&#34; D:\ Builds \ 31 \ 47 \ src \ MyComp \ Playground \ MyUser \ Utilities \ VisualStudio \ AddProjToSln.sln&#34; (1)正在建设中 &#34; d:\构建\ 31 \ 47 \ SRC \ MyComp \游乐场\ MYUSER \公用事业\ VisualStudio的\ AddProjToSln \ AddProjToSln.csproj&#34; (2)在节点1上(默认目标)。 2 - ; PrepareForBuild: 创建目录&#34; obj \ Debug \&#34;。 1&gt;项目&#34; D:\ Builds \ 31 \ 47 \ src \ MyComp \ Playground \ MyUser \ Utilities \ VisualStudio \ AddProjToSln.sln&#34; (1)正在建设中 &#34; d:\构建\ 31 \ 47 \ SRC \ MyComp \游乐场\ MYUSER \公用事业\ VisualStudio的\ TestInstall \ test_install.wixproj&#34; (3)在节点2上(默认目标)。 3 GT; PrepareForBuild: 创建目录&#34; obj \ Debug \&#34;。 编译: C:\ Program Files(x86)\ WiX Toolset v3.8 \ bin \ candle.exe -dDebug -d&#34; DevEnvDir = 如果不在Visual Studio中构建,则未定义&#34; -dSolutionDir = d:\构建\ 31 \ 47 \ SRC \ MyComp \游乐场\ MYUSER \公用事业\的VisualStudio \ -dSolutionExt = .sln -dSolutionFileName = AddProjToSln.sln -dSolutionName = AddProjToSln -dSolutionPath = D:\ Builds \ 31 \ 47 \ src \ MyComp \ Playground \ MyUser \ Utilities \ VisualStudio \ AddProjToSln.sln -dConfiguration = Debug -dOutDir = D:\ Builds \ 31 \ 47 \ bin \ -dPlatform = x86 -dProjectDir = D:\ Builds \ 31 \ 47 \ src \ MyComp \ Playground \ MyUser \ Utilities \ VisualStudio \ TestInstall \ -dProjectExt = .wixproj -dProjectFileName = test_install.wixproj -dProjectName = test_install -dProjectPath = D:\ Builds \ 31 \ 47 \ src \ MyComp \ Playground \ MyUser \ Utilities \ VisualStudio \ TestInstall \ test_install.wixproj -dTargetDir = D:\ Builds \ 31 \ 47 \ bin \ -dTargetExt = .msi -dTargetFileName = test.msi -dTargetName = test -dTargetPath = D:\ Builds \ 31 \ 47 \ bin \ test.msi -out obj \ Debug \ -arch x86 Product.wxs 3 GT; d:\构建\ 31 \ 47 \ SRC \ MyComp \游乐场\ MYUSER \公用事业\ VisualStudio的\ TestInstall \ Product.wxs(4): 警告CNDL1096:****************目标= D:\ Builds \ 31 \ 47 \ bin \ *********** [D:\ Builds \ 31 \ 47 \ src \ MyComp \ Playground \ MyUser \ Utilities \ VisualStudio \ TestInstall \ test_install.wixproj] 3 GT; d:\构建\ 31 \ 47 \ SRC \ MyComp \游乐场\ MYUSER \公用事业\ VisualStudio的\ TestInstall \ Product.wxs(5): 警告CNDL1096:**************** src = D:\ Builds \ 31 \ 47 \ bin \ ************** [D:\ Builds \ 31 \ 47 \ src \ MyComp \ Playground \ MyUser \ Utilities \ VisualStudio \ TestInstall \ test_install.wixproj] 链接: C:\ Program Files(x86)\ WiX Toolset v3.8 \ bin \ Light.exe -out D:\ Builds \ 31 \ 47 \ bin \ test.msi -pdbout D:\ Builds \ 31 \ 47 \ bin \ test .wixpdb -cultures:null -contentsfile obj \ Debug \ test_install.wixproj.BindContentsFileListnull.txt -outputsfile obj \ Debug \ test_install.wixproj.BindOutputsFileListnull.txt -builtoutputsfile obj \ Debug \ test_install.wixproj.BindBuiltOutputsFileListnull.txt -wixprojectfile D:\ Builds \ 31 \ 47 \ src \ MyComp \ Playground \ MyUser \ Utilities \ VisualStudio \ TestInstall \ test_install.wixproj OBJ \调试\ Product.wixobj 2 - ; GenerateTargetFrameworkMonikerAttribute: 跳过目标&#34; GenerateTargetFrameworkMonikerAttribute&#34;因为所有输出文件都相对于输入是最新的 文件。 3 GT; d:\构建\ 31 \ 47 \ SRC \ MyComp \游乐场\ MYUSER \公用事业\ VisualStudio的\ TestInstall \ Product.wxs(12): 错误LGHT0103:系统找不到该文件 &#39; d:\构建\ 31 \ 47 \ BIN \ AddProjToSln.exe&#39 ;. [d:\构建\ 31 \ 47 \ SRC \ MyComp \游乐场\ MYUSER \公用事业\ VisualStudio的\ TestInstall \ test_install.wixproj] 3 GT; d:\构建\ 31 \ 47 \ SRC \ MyComp \游乐场\ MYUSER \公用事业\ VisualStudio的\ TestInstall \ Product.wxs(15): 错误LGHT0103:系统找不到该文件 &#39; d:\构建\ 31 \ 47 \ BIN \ AddProjToSln.exe.config&#39 ;. [d:\构建\ 31 \ 47 \ SRC \ MyComp \游乐场\ MYUSER \公用事业\ VisualStudio的\ TestInstall \ test_install.wixproj] 3&gt;完成建筑项目&#34; D:\ Builds \ 31 \ 47 \ src \ MyComp \ Playground \ MyUser \ Utilities \ VisualStudio \ TestInstall \ test_install.wixproj&#34; (默认目标) - 失败。 2 - ; CoreCompile: C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ amd64 \ Csc.exe / noconfig / nowarn:1701,1702 / nostdlib + / platform:AnyCPU / errorreport:prompt / warn:4 /main:AddProjToSln.Program / highentropyva + / reference:&#34; c:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ PublicAssemblies \ envdte.dll&#34; / reference:&#34; c:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ PublicAssemblies \ envdte100.dll&#34; / reference:&#34; c:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ PublicAssemblies \ envdte80.dll&#34; / reference:&#34; c:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ PublicAssemblies \ envdte90.dll&#34; / reference:&#34; C:\ Program Files(x86)\ Reference 大会\微软\ Framework.NETFramework \ V4.5 \ Microsoft.CSharp.dll&#34; / reference:&#34; C:\ Program Files(x86)\ Reference 大会\微软\ Framework.NETFramework \ V4.5 \ Microsoft.VisualBasic.dll中&#34; / reference:&#34; C:\ Program Files(x86)\ Reference 大会\微软\ Framework.NETFramework \ V4.5 \ mscorlib.dll中&#34; / reference:&#34; C:\ Program Files(x86)\ Reference 大会\微软\ Framework.NETFramework \ V4.5 \ System.Core.dll&#34; / reference:&#34; C:\ Program Files(x86)\ Reference 大会\微软\ Framework.NETFramework \ V4.5 \ System.Data.DataSetExtensions.dll&#34; / reference:&#34; C:\ Program Files(x86)\ Reference 大会\微软\ Framework.NETFramework \ V4.5 \ System.Data.dll中&#34; / reference:&#34; C:\ Program Files(x86)\ Reference 大会\微软\ Framework.NETFramework \ V4.5 \ System.dll中&#34; / reference:&#34; C:\ Program Files(x86)\ Reference 大会\微软\ Framework.NETFramework \ V4.5 \ System.Windows.Forms.dll的&#34; / reference:&#34; C:\ Program Files(x86)\ Reference 大会\微软\ Framework.NETFramework \ V4.5 \ system.xml.dll的&#34; / reference:&#34; C:\ Program Files(x86)\ Reference 大会\微软\ Framework.NETFramework \ V4.5 \ System.Xml.Linq.dll&#34; / debug + / debug:full / filealign:512 / optimize- /out:obj\Debug\AddProjToSln.exe /subsystemversion:6.00 / target:exe / utf8output / win32icon:&#34; Crystal_Clear_mimetype_recycled(2).ico&#34; Program.cs Properties \ AssemblyInfo.cs &#34; C:\ Users \用户tfsbuild \应用程序数据\本地\ Temp.NETFramework,版本= v4.5.AssemblyAttributes.cs&#34; _CopyAppConfigFile: 从&#34; App.config&#34;复制文件;到&#34; D:\ Builds \ 31 \ 47 \ bin \ AddProjToSln.exe.config&#34;。 CopyFilesToOutputDirectory: 从&#34; obj \ Debug \ AddProjToSln.exe&#34;复制文件到&#34; D:\ Builds \ 31 \ 47 \ bin \ AddProjToSln.exe&#34;。 AddProjToSln - &gt; d:\构建\ 31 \ 47 \ BIN \ AddProjToSln.exe 从&#34; obj \ Debug \ AddProjToSln.pdb&#34;复制文件到&#34; D:\ Builds \ 31 \ 47 \ bin \ AddProjToSln.pdb&#34;。 2&gt;完成建筑项目&#34; D:\ Builds \ 31 \ 47 \ src \ MyComp \ Playground \ MyUser \ Utilities \ VisualStudio \ AddProjToSln \ AddProjToSln.csproj&#34; (默认目标)。 1&gt;完成建筑项目&#34; D:\ Builds \ 31 \ 47 \ src \ MyComp \ Playground \ MyUser \ Utilities \ VisualStudio \ AddProjToSln.sln&#34; (默认目标) - 失败。
构建失败。
"D:\Builds\31\47\src\MyComp\Playground\MyUser\Utilities\VisualStudio\AddProjToSln.sln"
(默认目标)(1) - &gt; &#34; d:\构建\ 31 \ 47 \ SRC \ MyComp \游乐场\ MYUSER \公用事业\ VisualStudio的\ TestInstall \ test_install.wixproj&#34; (默认目标)(3) - &gt; (编译目标) - &gt; d:\构建\ 31 \ 47 \ SRC \ MyComp \游乐场\ MYUSER \公用事业\ VisualStudio的\ TestInstall \ Product.wxs(4): 警告CNDL1096:****************目标= D:\ Builds \ 31 \ 47 \ bin \ *********** [D:\ Builds \ 31 \ 47 \ src \ MyComp \ Playground \ MyUser \ Utilities \ VisualStudio \ TestInstall \ test_install.wixproj] d:\构建\ 31 \ 47 \ SRC \ MyComp \游乐场\ MYUSER \公用事业\ VisualStudio的\ TestInstall \ Product.wxs(5): 警告CNDL1096:**************** src = D:\ Builds \ 31 \ 47 \ bin \ ************** [D:\ Builds \ 31 \ 47 \ src \ MyComp \ Playground \ MyUser \ Utilities \ VisualStudio \ TestInstall \ test_install.wixproj]
"D:\Builds\31\47\src\MyComp\Playground\MyUser\Utilities\VisualStudio\AddProjToSln.sln"
(默认目标)(1) - &gt; &#34; d:\构建\ 31 \ 47 \ SRC \ MyComp \游乐场\ MYUSER \公用事业\ VisualStudio的\ TestInstall \ test_install.wixproj&#34; (默认目标)(3) - &gt; (链接目标) - &gt; d:\构建\ 31 \ 47 \ SRC \ MyComp \游乐场\ MYUSER \公用事业\ VisualStudio的\ TestInstall \ Product.wxs(12): 错误LGHT0103:系统找不到该文件 &#39; d:\构建\ 31 \ 47 \ BIN \ AddProjToSln.exe&#39 ;. [d:\构建\ 31 \ 47 \ SRC \ MyComp \游乐场\ MYUSER \公用事业\ VisualStudio的\ TestInstall \ test_install.wixproj] d:\构建\ 31 \ 47 \ SRC \ MyComp \游乐场\ MYUSER \公用事业\ VisualStudio的\ TestInstall \ Product.wxs(15): 错误LGHT0103:系统找不到该文件 &#39; d:\构建\ 31 \ 47 \ BIN \ AddProjToSln.exe.config&#39 ;. [d:\构建\ 31 \ 47 \ SRC \ MyComp \游乐场\ MYUSER \公用事业\ VisualStudio的\ TestInstall \ test_install.wixproj]
2 Warning(s) 2 Error(s)
时间流逝00:00:01.04
我多次验证文件是否存在,并且在使用MsBuild和Wix工具集的命令行中构建没有任何问题。
我无法弄清楚为什么使用TfvcTemplate.12.xaml,wix无法查看其文件,而这些文件在那里完好无损....
任何帮助都会非常感激。
答案 0 :(得分:2)
所以,经过一整天的努力,终于能够解决这个问题。像Digg一座山,有一只老鼠:)。
实际上TfvcTemplate.12.xaml似乎正在执行启用并行处理的MsBuild(/ m),而在我的VS解决方案中,Wix项目是独立添加的,即在Build Order中它是最后一个要构建的项目,但我从未设置过其他项目作为其依赖项。因此,MSBuild发现它没有依赖关系并忽略了它的构建顺序,只是按随机顺序或第一个项目构建它。所以自然安装程序项目无法找到其源文件,因此失败。
我通过删除MSBuild的/ m:1参数并将所有其他项目声明为Wix Project的依赖项来验证这种现象:即在VS,PROJECT - &gt;中。项目依赖性。这导致MsBuild在Wix Project之前构建所有其他项目,现在Wix能够正确地找到它的源文件......
以下是插图的截图: