使用mvs2013或mvs2014的Windows 10上的Wix无法正常工作(使php可执行)

时间:2016-05-09 18:27:01

标签: msbuild wix

使用mvs2013或mvs2014的Windows 10上的Wix无效。

我收到错误: 错误The "GenerateCompileWithObjectPath" task could not be loaded from the assembly \WixTasks.dll. Could not load file or assembly 'file:///c:\WixTasks.dll' or one of its dependencies. The system cannot find the file specified. Confirm that the <UsingTask> declaration is correct, that the assembly and all its dependencies are available, and that the task contains a public class that implements Microsoft.Build.Framework.ITask. SetupProject5 C:\Program Files (x86)\MSBuild\Microsoft\WiX\v3.x\wix2010.targets

如果我尝试将WixTasks.dll包含在项目中,则mvs2013或mvs2014在构建期间崩溃。我从解压缩的wix二进制文件夹中将\WixTasks.dll包含在C:\SourceControl\vs2015\SetupProject1\SetupProject1\SetupProject1.wixproj中: C:\SourceControl

// C:\SourceControl\vs2015\SetupProject1\SetupProject1\SetupProject1.wixproj

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
    <ProductVersion>3.10</ProductVersion>
    <ProjectGuid>0adbe89f-e1ce-4345-90e6-64b8304fa42f</ProjectGuid>
    <SchemaVersion>2.0</SchemaVersion>
    <OutputName>SetupProject1</OutputName>
    <OutputType>Package</OutputType>
     <WixToolPath>C:\SourceControl</WixToolPath>
    <WixTargetsPath>$(WixToolPath)\wix.targets</WixTargetsPath>
    <WixTasksPath>$(WixToolPath)\WixTasks.dll</WixTasksPath>    
    <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
    <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
    <OutputPath>bin\$(Configuration)\</OutputPath>
    <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
    <DefineConstants>Debug</DefineConstants>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
    <OutputPath>bin\$(Configuration)\</OutputPath>
    <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
  </PropertyGroup>
  <ItemGroup>
    <Compile Include="Product.wxs" />
  </ItemGroup>
  <Import Project="$(WixTargetsPath)" />
  <!--
    To modify your build process, add your task inside one of the targets below and uncomment it.
    Other similar extension points exist, see Wix.targets.
    <Target Name="BeforeBuild">
    </Target>
    <Target Name="AfterBuild">
    </Target>
    -->

过去两天我正在阅读不同的在线论坛和示例。另外,Pact在尼克拉米雷斯的书中讲述了wix。什么都行不通。     

5 个答案:

答案 0 :(得分:2)

定义以下MSBuild变量,一切都应该有效。

<WixRootPath Condition=" '$(WixRootPath)' == '' ">$(MSBuildThisFileDirectory)Tools\wix\$(WixTargetVersion)\</WixRootPath>
<WixToolPath Condition=" '$(WixToolPath)' == '' ">$(WixRootPath)</WixToolPath>
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(WixRootPath)Wix.targets</WixTargetsPath>
<WixCATargetsPath Condition=" '$(WixCATargetsPath)' == '' ">$(WixRootPath)sdk\Wix.CA.targets</WixCATargetsPath>
<WixTasksPath Condition=" '$(WixTasksPath)' == '' ">$(WixToolPath)WixTasks.dll</WixTasksPath>
<WixSdkPath Condition=" '$(WixSdkPath)' == '' ">$(WixRootPath)sdk\</WixSdkPath>

确保路径正确。这些路径用于wix 3.10.2二进制文件,我在构建机器上检查我的构建。

我认为构建任务应该在WIX环境变量定义的路径中查找,但我并非100%确定。

认为用您设置的路径定义所有变量应修复所有内容,因为错误提到在C:\ WixTasks.dll查找通常它寻找的路径类似于$(WixInstallPath)WixTasks .dll但是如果$(WixInstallPath)没有被正确定义,它将只是空的并且默认为C:\ WixTasks.dll。你确实定义了$(WixTasksPath),但我认为它因某些原因而被覆盖......

无论如何,你的系统现在出现了问题,但你可能会以这种方式解决这个问题。


编辑:如果以上操作不起作用,请从here下载wix二进制文件并将其解压缩到一个名为&#34; Wix&#34;的文件夹中。或者你想称之为什么。然后将WixRootPath设置为等于该位置。

答案 1 :(得分:0)

来自WiX Cookbook的工作解决方案,Nick Ramirez,2015年,第1章“从命令行构建WiX安装程序”,示例4“BuildMachineInstaller”

下载并解压缩wix二进制文件,例如从here开始。 1.为项目创建一个文件夹,例如C:\SourceControl\own\box1,文件为Product.wxs 2.将二进制文件解压缩到某个文件夹,例如C:\SourceControl\own\box1\tools\wix 3.启动Windows命令行工具cmd并切换到项目文件夹。执行candlelight命令如下:

C:\ SourceControl \自己\ BOX1&GT; C:\SourceControl\own\box1\tools\wix\candle *.wxs -o obj\

C:\ SourceControl \自己\ BOX1&GT; C:\SourceControl\own\box1\tools\wix\light obj\*.wixobj -o bin\CommandLineInstaller.msi

无论如何,如果有人可以提供一些工作示例文件和描述如何使用MSBuild或Visual Studio Build和wix制作* .exe或* .msi,我会非常感激。 Pact书中的其他例子并不是纯粹的复制,尽管对于一般的理解非常有用。

答案 2 :(得分:0)

我刚刚遇到这个问题,发现在wix2010.targets文件的顶部是以下属性组。

<PropertyGroup>
<WixInstallPath Condition=" '$(WixInstallPath)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Installer XML\3.11@InstallRoot)</WixInstallPath>
<WixInstallPath Condition=" '$(WixInstallPath)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows Installer XML\3.11@InstallRoot)</WixInstallPath>

检查引用的注册表路径时,3.11没有条目,但3.10有一个条目。并且已安装的版本报告为3.10。因此,将属性组更新为以下内容已为我更正了问题。

<PropertyGroup>
<WixInstallPath Condition=" '$(WixInstallPath)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Installer XML\3.10@InstallRoot)</WixInstallPath>
<WixInstallPath Condition=" '$(WixInstallPath)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows Installer XML\3.10@InstallRoot)</WixInstallPath>

希望这有帮助。

答案 3 :(得分:0)

我在使用VS2015并使用不同版本的Wix的git分支时遇到过这种情况。 (我升级到最新的Wix版本,但并非所有分支都在那里。)

如果在Wix中使用不同版本的git分支之间切换,则必须终止并重新启动VS. VS将一些Wix文件打开,这些文件在任何其他版本的Wix下都无法运行。如果你忘记这样做,你的VS版本将失败,并且#34;&#34; GenerateCompileWithObjectPath&#34;无法从程序集C:\ Program Files(x86)\ WiX Toolset v3.10 \ bin \ WixTasks.dll&#34;

加载任务

答案 4 :(得分:0)

我按照以下说明解决了问题:

https://github.com/wixtoolset/wix3/releases/tag/wix3111rtm下载WIX311.exe 从https://marketplace.visualstudio.com/items?itemName=RobMensching.WixToolsetVisualStudio2017Extension

下载Votive2017.vsix

从您的解决方案/项目中删除所有旧的WiX nuget数据包

请按照以下说明操作(您可以省略/安静)。

http://packagingstuffs.blogspot.com/2017/11/wix-toolset-311-silent-install-method.html 来自上述网站的内容;

安装: 步骤1:从Web下载源并获取安装程序wix311.exe。 步骤2:运行以下命令:wix311.exe / install / quiet / norestart 步骤3:将Votive2017.vsix文件(由供应商提供)复制到本地计算机(例如%TEMP%) 步骤4:从其存储位置运行VSIX安装程序 &#34;%ProgramFiles(x86)%\ Microsoft Visual Studio \ 2017 \ Professional \ Common7 \ IDE \ VSIXInstaller.exe&#34; /安静

祝你好运和最好的问候