首页 > 解决方案 > 蜡 Nuget 包

问题描述

所以这是场景:我有几个 wix 项目,它们具有完全相同的额外 msbuild 目标和任务来自动化一些非常繁琐的任务:比如构建帮助文件和使用 signtool.exe 对 msi 和输出文件进行身份验证。

每次我进行修复时,我都厌倦了将这些脚本的更改复制到 5 个不同的存储库中。所以我很聪明,我把它们变成了 nuget 包,在 build 文件夹中有一个 .targets 文件。一个简单的 nuget 还原将一揽子软件包转换为目标文件。

问题 Wix v3 不喜欢软件包。它不支持包引用,所以 packages.config 看起来很像。除了 Visual Studio 不喜欢 packages.config 之外。它会很高兴地恢复包(到我用 nuget.config 指定的文件夹中),但不会自动导入任何 .targets 文件。

很容易修复:我刚刚在我的 wixproj 文件中添加了一个导入语句。除了 Visual Studio 在运行还原操作后不会自动重新评估 wixproj 之外。我们可以解决这个问题,但是在包更改时必须构建、卸载项目、重新加载项目和重新构建真的很烦人。

所以我尝试修复它, 我爬取了标准 C# 项目构建的日志输出并发现了 Nuget.Targets 文件,该文件可以导入到项目中以提供packrestore定位。它还让我可以转换为 packagereferences,它比 packages.config 更方便且不那么混乱,但我仍然必须手动为 nuget.g.targets 和 nuget.g.props 文件添加导入语句restore目标。

而且,由于我必须手动导入这些文件,我马上回到构建、卸载、重新加载、重建工作流程。

第 2 次尝试 我通过大量的互联网搜索发现 msbuild 最近/restore在他们的命令行实用程序中添加了一个标志,专门用于在恢复包后强制重新评估项目。这适用于命令行,但视觉工作室似乎一无所知。(可能是因为 wix v3 在 Visual Studio 模板中的幕后操作?)无论如何,他们在问题说明中提到,他们实际上是在使用具有新全局属性的 msbuild 任务来强制重新评估。所以我试图在我的wixproj的预构建事件中添加这样一个步骤,但没有酱汁。

问题

我如何告诉 Visual Studio 在运行恢复后重新评估这个 wixproj?我需要将某种属性或项目组添加到 wixproj 吗?我可以在构建过程中插入某种目标吗?


更新1:

找到了一个看起来很有希望的项目属性:UseHostCompilerIfAvailable,但它不起作用。仍然遇到同样的问题。

标签: msbuildwixnuget-package-restorewix3.11

解决方案


推荐阅读