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