Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要时,通过安装中的复杂文件列表,从web自动安装.net Framework 4.0_C#_.net_Wix_Wix3.6_Wix3.7 - Fatal编程技术网

C# 需要时,通过安装中的复杂文件列表,从web自动安装.net Framework 4.0

C# 需要时,通过安装中的复杂文件列表,从web自动安装.net Framework 4.0,c#,.net,wix,wix3.6,wix3.7,C#,.net,Wix,Wix3.6,Wix3.7,我已经完成了一个安装项目,其中包含几个文件、DLL、一个Windows窗体应用程序和一个Windows服务。一切都是用C#(.net)编写的 我使用WiX配置msi安装,现在文件如下: <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="*" Name="App Name" Language="1033" Version="1.0.0" Manufacturer="C

我已经完成了一个安装项目,其中包含几个文件、DLL、一个Windows窗体应用程序和一个Windows服务。一切都是用C#(.net)编写的

我使用WiX配置msi安装,现在文件如下:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">

  <Product Id="*" Name="App Name" Language="1033" Version="1.0.0"
           Manufacturer="Company Name" UpgradeCode="GUID-HERE">

    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

    <Icon Id="InstallIcon" SourceFile="msiicon.ico" />
    <Property Id="ARPPRODUCTICON" Value="InstallIcon" />

    <Media Id="1" Cabinet="SingleCab.cab" EmbedCab="yes" />

    <Feature Id="ProductFeature" Title="Title" Level="1">
      <!-- Some features here-->
    </Feature>

    <UI><!-- Many UI here--></UI>
  </Product>

  <!-- Some fragments tag here -->
</Wix>

但是我需要插入.NETFramework4.0的检查。如果未安装.net Framework 4.0,请自动运行web安装

因此,我搜索并找到了许多类似的例子来说明如何做到这一点。我发现的几乎所有示例都涉及标记包、链和MSI包

我的问题是如何将我所拥有的与我所发现的例子相结合

请参见,在所有示例(获取下一行)中,合并项目发生在这一行:

<MsiPackage
  SourceFile="$(var.SetupProject1.TargetPath)">
</MsiPackage>


但我没有VisualStudio项目,我在产品标签中有很多文件。产品标签在
内部或
内部不起作用,所以我知道什么?如何将我所有的
内容放在这里面。

首先,让我们建立一些基本知识

WiX项目是visualstudio项目。VisualStudio项目是项目。MSBuild项目是XML文件。通常,MSBuild项目会将其他MSBuild项目作为库导入(扩展名为.targets),因为生成项目所需的大多数信息对于相同类型的所有项目(例如.csproj)都是通用的。MSBuild项目可以使用.NET Framework附带的MSBuild.exe生成。MSBuild项目最终执行任务以生成项目。这些任务通常是对命令行工具的调用,或者,如果可用,是对库的等效函数调用

要使用WiX源文件,将调用WiX的candle.exe和light.exe。要生成一些WiX源文件,可以调用WiX的heat.exe

WiX提供了MSBuild任务来为您完成此任务。它还提供导入这些任务的MSBuild项目模板。通常使用IDE(如或)将项目模板转换为项目。但是您可以手工编写一个项目文件,引用。同样,这样的项目可以通过调用msbuild.exe来构建,或者IDE可以为您调用msbuild

使用IDE可以方便地编辑WiX源文件和项目。可以使用IDE的项目设计器或XML编辑器编辑项目文件。(在VS的解决方案资源管理器中,先卸载项目,然后编辑项目。)因为源文件和项目都是XML,IDE应该根据文件的XML模式提供帮助

许多类型的项目(例如.csproj和.wixproj)允许项目引用其他项目。项目引用的目的和功能取决于项目的MSBuild导入。您可能熟悉C#项目中的C#项目参考。至少,人们会期望在引用项目之前构建引用项目

WiX项目可以引用.NET项目(例如.csproj)或其他WiX项目。对于每个项目引用,WiX根据引用项目的名称定义一些。例如:如果您有一个WiX引导程序项目,它可以引用名为
SetupProject1
的WiX安装程序项目,因此
var.SetupProject1.TargetPath
将被定义为在引导程序源代码中使用。另一个例子:如果您有一个WiX安装项目,它可以引用一个名为
ConsoleApplication1
的C#项目,因此将定义
var.ConsoleApplication1.TargetPath
。在这两个示例中,目标路径很可能根据项目配置(例如调试、发布)而变化。WiX根据配置将变量指向引用项目中定义的适当路径

底线
  • 产品元素用于WiX设置项目;Bundle元素用于WiX引导程序项目。(如果不使用项目文件,您可以为产品调用一次WiX的命令行工具,为Bundle调用一次)
  • 对于包元素,SourceFile应该是相应msi或exe文件的路径。它可以是路径,也可以是在candle.exe命令行或通过项目引用定义的变量
  • 您可能错过了使用WiX项目和MSBuild的便利性。与所有VisualStudio项目一样,您可以不使用IDE,也可以选择免费或付费的IDE。您可能已经在为C#项目使用IDE和MSBuild了。将它们用于WiX项目与向解决方案中添加VB.NET项目没有太大区别

    你应该考虑一个WiX安装项目,它引用了你的C项目和一个引用你的WIX安装项目的WIX引导程序项目。构建解决方案,您就完成了


    (当然,在开发过程中,您可能不希望在解决方案中安装项目。在这种情况下,请使用多个解决方案文件。)

    如果您希望同时安装.NET和.MSI软件包,从最终用户的角度来看,您可以使用Burn创建“捆绑包”:但问题是,在本例中或在文档链接中,始终使用对Visual Studio项目的引用,如
    $(var.SetupProject1.TargetPath)
    。我使用WiX处理已经编译的文件,而不是项目。