我正在尝试为我们的应用程序创建一个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
当我创建任何类型的安装程序/ zip文件/我的项目时,我从来没有在Visual Studio的"标准"构建中,即在.csproj文件中.
(我知道你试图把预构建事件放在哪里 - 对吗?)
原因是我不想在我编程的每一个构建上重建安装程序/ zip.
我一直在做的事情:
我创建一个MSBuild项目文件,我可以从资源管理器手动执行(通常通过批处理文件),它编译Visual Studio解决方案,然后创建zip文件,安装程序,NuGet包或我需要的任何东西.
因此,创建设置完全取决于Visual Studio解决方案,但我可以从源代码控制中提取最新的更改,然后构建所有内容并通过单击创建设置.
(乔尔测试,第二个问题:"你可以一步到位吗?")
当我不需要Visual Studio放入输出文件夹的所有内容时,我只需将我需要的文件复制到另一个文件夹中.
以下是我的一个项目的示例:
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)我用来执行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(它能够镜像完整的文件夹,但排除某些文件扩展名).
编辑:
尝试构建完整的解决方案,而不仅仅是一个项目.
将包含以下内容的批处理文件放在文件所在的.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)第二个错误说的是PreBuildEvent target
- >你是否已经在你的预构建事件中加入了.csproj什么?也许这不起作用.
EDIT2:
我正在做类似的事情:
我只有一个批处理文件,它将版本号(在我的情况下是硬编码的)放入一个环境变量中,然后在进行实际构建之前从我的主构建批处理中调用该批处理文件.
在我看来.csproj,我有一个预构建事件,它将程序集版本号设置为环境变量中的值(如果存在),否则只是0.0.
(我不关心从Visual Studio构建时的版本号 - 我使用批处理文件创建所有版本构建,因此我只需要版本号)
编辑3:
最后一步,将整个输出输入Wix,链接每个文件,这在mu项目中不实用.它的几个子文件夹和数千个文件.关于如何在wix中链接整个输出文件夹的任何好主意?
对不起,我以前从未尝试过这个.使用WiX的正确方法是从一开始就逐步建立设置.
从链接引用(由我强调):
当然,将所有数百或数千个组件键入WiX源文件是另一项挑战.该工具集有一个 小实用程序可以帮助解决这个问题(稍后会详细介绍),但真正的解决方案是概念上的变化.停止将安装程序视为一个单独的应用程序,当主应用程序已经完成时,必须立即编写.由于WiX源文件和工具集本身可以轻松集成到您的开发环境中,因此您应始终保持同步.一旦开始处理新模块或向程序添加新的注册表引用,请同时修改相应的WiX源文件.这样,设置将与应用程序本身一起完成,并且不需要提取稍后安装所需的所有文件和其他信息.由于WiX项目可以模块化(稍后会详细介绍),如果您有一个大型团队负责应用程序而不是单个开发人员,这种方法也可以正常工作.
引用文本中的链接指向描述该Heat工具的页面,该页面似乎是您之前提到的"收获"工具,并且已经尝试过但没有成功.
| 归档时间: |
|
| 查看次数: |
5588 次 |
| 最近记录: |