这是场景:我有几个wix项目,它们完全相同,额外的msbuild目标和任务可以使一些非常繁琐的任务自动化:诸如构建帮助文件,使用signtool.exe验证Msi和输出文件的身份。 >
每次进行修复时,都已经厌倦了将对这些脚本的更改复制到5个不同的存储库中的工作。因此,我变得很聪明,并把它们变成了build文件夹中带有.targets文件的nuget包。简单的nuget还原可将一揽子程序包清单转换为目标文件。
问题 Wix v3不喜欢软件包。它不支持包引用,所以packages.config看起来像东西。除了Visual Studio不喜欢packages.config。它将很乐意将软件包恢复到我使用nuget.config指定的文件夹中,但是不会自动导入任何.targets文件。
易于修复:我刚刚在我的wixproj文件中添加了一个导入语句。除了运行恢复操作后Visual Studio不会自动重新评估wixproj之外。我们可以使用它,但是必须在任何更改软件包的情况下都必须构建,卸载项目,重新加载项目并重新构建,这确实很烦人。
所以我试图修复
我抓取了标准C#项目构建的日志输出,并发现了Nuget.Targets文件,该文件可以导入到项目中以提供pack
和restore
目标。它也让我转换为packagereferences,它比packages.config更为方便且不那么混乱,但是我仍然必须手动为由程序生成的nuget.g.targets和nuget.g.props文件添加import语句。 restore
目标。
而且,由于必须手动导入这些文件,因此我可以直接回到构建,卸载,重新加载,重建工作流程。
尝试号码2
通过大量的Internet搜索,我发现msbuild最近在其命令行实用工具中添加了/restore
标志,专门用于在还原软件包后强制进行项目重新评估。这可以在命令行上运行,但是Visual Studio似乎毫无头绪。 (也许是因为wix v3在Visual Studio模板中做了一些幕后工作?)无论如何,他们在问题说明中提到他们本质上是在使用具有新全局属性的msbuild任务来强制进行重新评估。因此,我尝试在wixproj的预构建事件中添加这样的步骤,但没有调味。
在运行还原后,如何告诉Visual Studio重新评估此wixproj?我需要添加某种类型的属性或项目组到wixproj吗?我可以在构建过程中插入某种目标吗?
找到了一个看起来很有前途的项目属性:UseHostCompilerIfAvailable
,但没有用。仍然有同样的问题。