nuget - 如何在 Inno Setup 安装程序中捆绑来自 NuGet 包的仅运行时依赖项?

标签 nuget installation inno-setup

我正在为具有几个运行时 dll 依赖项的程序创建安装程序。这些依赖项以 NuGet 包的形式提供。我想知道我是否可以以某种方式将 NuGet 包列表指定给 Inno Setup,这样它就会下载这些包并将相应的 dll 捆绑到我的安装程序中?

如果这不可能,那么从安装程序中的 NuGet 包中捆绑此类仅运行时 dll 的预期方法是什么?

最佳答案

您可以使用 Inno Setup preprocessor运行 nuget.exe下载包并根据下载的内容生成 [Files] 部分条目。

例如,下面定义了 NuGetPackage 预处理器宏,它收集下载包的 lib\net45 文件夹中的所有文件:

#pragma parseroption -p-

#define ProcessFile(Source, FindResult, FindHandle) \
    FindResult \
        ? \
            Local[0] = FindGetFileName(FindHandle), \
            Local[1] = Source + "\\" + Local[0], \
            "Source: \"" + Local[1] + "\"; DestDir: \"{app}\"\n" + \
                ProcessFile(Source, FindNext(FindHandle), FindHandle) \
        : \
            ""

#define NuGetPackage(Name) \
    Exec("nuget.exe", "install " + Name, SourcePath, , SW_HIDE), \
    Local[0] = FindFirst(AddBackslash(SourcePath) + Name + "*", faDirectory), \
    Local[0] \
        ? \
            Local[1] = FindGetFileName(Local[0]), \
            Local[2] = AddBackslash(SourcePath) + Local[1], \
            Local[3] = Local[2] + "\\lib\\net45", \
            Local[4] = FindFirst(Local[3] + "\\*", 0), \
            ProcessFile(Local[3], Local[4], Local[4]), \
        : \
            ""

#pragma parseroption -p+

你可以像这样使用它:

[Files]
#emit NuGetPackage("NUnit")
#emit NuGetPackage("EntityFramework")

得到:

[Files]
Source: "C:\source\path\NUnit.3.8.1\lib\net45\nunit.framework.dll"; DestDir: "{app}"
Source: "C:\source\path\NUnit.3.8.1\lib\net45\nunit.framework.xml"; DestDir: "{app}"
Source: "C:\source\path\EntityFramework.6.1.3\lib\net45\EntityFramework.dll"; DestDir: "{app}"
Source: "C:\source\path\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll"; DestDir: "{app}"
Source: "C:\source\path\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.xml"; DestDir: "{app}"
Source: "C:\source\path\EntityFramework.6.1.3\lib\net45\EntityFramework.xml"; DestDir: "{app}"

关于nuget - 如何在 Inno Setup 安装程序中捆绑来自 NuGet 包的仅运行时依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46562537/

相关文章:

asp.net - 哪个 NuGet 包包含 System.Web.Routing?

NuGet 不更新项目引用

jenkins - 从 Jenkins CI 推送到 Nexus 3 NuGet 存储库,无需提供凭据

git - 在 ubuntu 20.04 上安装 git 时发生错误

reportviewer - Inno Setup - 检查程序是否已安装? (该程序是Microsoft Report Viewer Redistributable 2008)

installation - 编译后ISTool错误

c# - 在 Visual Studio 外部为 ASP.NET 网站重新安装 NuGet 包

installation - 如何使用waf递归安装目录

inno-setup - Inno Setup 中的目录确认对话框窗口

windows - 开始使用 openMP。安装在 window 上