为Wix安装程序构建项目

And*_*ers 4 .net wix

我正在尝试为我们的应用程序创建一个Wix安装程序.Wix项目收获不起作用,因为它只将主exe文件复制到安装目录,所有dll等都不会被复制.

所以我想有一个构建应用程序并使用Wix输出的预构建事件.

问题是输出将包含.pdb,vchost.exe等文件.我可以配置构建,以便它只输出所需的文件吗?

编辑:最终的解决方案可以在这里找到 https://github.com/AndersMalmgren/FreePIE/blob/master/BuildTools

首先查看 https://github.com/AndersMalmgren/FreePIE/blob/master/BuildTools/build_installer.bat

Chr*_*cht 7

当我创建任何类型的安装程序/ zip文件/我的项目时,我从来没有在Visual Studio的"标准"构建中,即在.csproj文件中.
(我知道你试图把预构建事件放在哪里 - 对吗?)
原因是我不想在我编程的每一个构建上重建安装程序/ zip.

我一直在做的事情:
我创建一个MSBuild项目文件,我可以从资源管理器手动执行(通常通过批处理文件),它编译Visual Studio解决方案,然后创建zip文件,安装程序,NuGet包或我需要的任何东西.
因此,创建设置完全取决于Visual Studio解决方案,但我可以从源代码控制中提取最新的更改,然后构建所有内容并通过单击创建设置.
(乔尔测试,第二个问题:"你可以一步到位吗?")

当我不需要Visual Studio放入输出文件夹的所有内容时,我只需将我需要的文件复制到另一个文件夹中.

以下是我的一个项目的示例:

  1. MSBuild文件
    最后一段("复制文件到发布文件夹")将文件夹的内容\bin\Release(但不包括*.pdb*.xml文件)和一些文件从根文件夹复制到一个单独的"发布"目录:

    <!-- copy files to release folder -->
    <Target Name="CopyRelease">
            <MakeDir Directories="$(ReleaseDir)"/>
            <ItemGroup>
                    <ReleaseFiles
                            Include="$(OutDir)\**\*.*;
                                    README.md;
                                    License.rtf"
                            Exclude="$(OutDir)\*.pdb;
                                    $(OutDir)\*.xml">
                    </ReleaseFiles>
            </ItemGroup>
            <Copy SourceFiles="@(ReleaseFiles)" DestinationFiles="@(ReleaseFiles -> '$(ReleaseDir)\%(RecursiveDir)%(Filename)%(Extension)')"/>
    
    </Target>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我用来执行MSBuild文件
    的批处理文件批处理文件中有更多代码(用于处理版本号之类的东西),但执行MSBuild文件的重要部分是:

    rem path to msbuild.exe
    path=%path%;%windir%\Microsoft.net\Framework\v4.0.30319
    
    rem go to current folder
    cd %~dp0
    
    msbuild build.proj
    
    Run Code Online (Sandbox Code Playgroud)

我实际上是使用WiX为这个项目构建安装程序,但是我没有使用你正在使用的"收获"功能(之前我不知道).
我只是在WiX项目文件中为安装程序指定每个文件,然后我使用另一个批处理文件来构建项目(通过调用上面提到的第一个批处理文件)然后使用WiX设置.

即使我对实际WiX工具的使用与您的不同,您仍然可以使用类似于上述方法的方法为WiX的收获功能创建"源文件夹":
调用批处理文件,准确复制您需要的文件一个不同的文件夹,并将用作创建安装程序的源.
如果您不想创建MSBuild文件,您甚至可以使用Robocopy(它能够镜像完整的文件夹,但排除某些文件扩展名).


编辑:

  1. 尝试构建完整的解决方案,而不仅仅是一个项目.
    将包含以下内容的批处理文件放在文件所在的.sln文件夹中:

    set PATH=%PATH%;%WINDIR%\Microsoft.Net\Framework64\v4.0.30319
    
    rem go to current folder
    cd %~dp0
    
    msbuild YourSolution.sln /p:Configuration=Release
    
    Run Code Online (Sandbox Code Playgroud)
  2. 第二个错误说的是PreBuildEvent target
    - >你是否已经在你的预构建事件中加入了.csproj什么?也许这不起作用.


EDIT2:

我正在做类似的事情:
我只有一个批处理文件,它将版本号(在我的情况下是硬编码的)放入一个环境变量中,然后在进行实际构建之前从我的主构建批处理中调用该批处理文件.
在我看来.csproj,我有一个预构建事件,它将程序集版本号设置为环境变量中的值(如果存在),否则只是0.0.
(我不关心从Visual Studio构建时的版本号 - 我使用批处理文件创建所有版本构建,因此我只需要版本号)


编辑3:

最后一步,将整个输出输入Wix,链接每个文件,这在mu项目中不实用.它的几个子文件夹和数千个文件.关于如何在wix中链接整个输出文件夹的任何好主意?

对不起,我以前从未尝试过这个.使用WiX的正确方法是从一开始就逐步建立设置.

从链接引用(由我强调):

当然,将所有数百或数千个组件键入WiX源文件是另一项挑战.该工具集有一个 小实用程序可以帮助解决这个问题(稍后会详细介绍),但真正的解决方案是概念上的变化.停止将安装程序视为一个单独的应用程序,当主应用程序已经完成时,必须立即编写.由于WiX源文件和工具集本身可以轻松集成到您的开发环境中,因此您应始终保持同步.一旦开始处理新模块或向程序添加新的注册表引用,请同时修改相应的WiX源文件.这样,设置将与应用程序本身一起完成,并且不需要提取稍后安装所需的所有文件和其他信息.由于WiX项目可以模块化(稍后会详细介绍),如果您有一个大型团队负责应用程序而不是单个开发人员,这种方法也可以正常工作.

引用文本中链接指向描述该Heat工具的页面,该页面似乎是您之前提到的"收获"工具,并且已经尝试过但没有成功.