gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:27:23 30 4
gpt4 key购买 nike

我正在为具有几个运行时 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com