如何在Inno Setup installer中捆绑来自NuGet软件包的仅运行时依赖项?

如何在Inno Setup installer中捆绑来自NuGet软件包的仅运行时依赖项?,nuget,installation,inno-setup,Nuget,Installation,Inno Setup,我正在为一个具有两个运行时dll依赖项的程序创建一个安装程序。这些依赖项可以作为NuGet包提供。我想知道我是否可以指定Inno安装程序的NuGet包列表,这样它就可以下载包并在我的安装程序中绑定相应的dll 如果这是不可能的,那么从安装程序中的NuGet软件包中捆绑此类仅运行时dll的预期方式是什么?您可以使用run下载软件包,并根据下载的内容生成[文件]节项 例如,以下定义了收集下载包的lib\net45文件夹中所有文件的NuGetPackage预处理器宏: #pragma parserop

我正在为一个具有两个运行时dll依赖项的程序创建一个安装程序。这些依赖项可以作为NuGet包提供。我想知道我是否可以指定Inno安装程序的NuGet包列表,这样它就可以下载包并在我的安装程序中绑定相应的dll

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

您可以使用run下载软件包,并根据下载的内容生成
[文件]
节项

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

#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}"

您想在编译时还是安装时下载它们?“仅运行时依赖项”是什么意思?在创建安装程序时需要下载这些依赖项,以便将它们捆绑在一起。这是在编译我的应用程序之后,但在我的安装程序的创建过程中。当执行安装程序来安装我的应用程序时,dll应该包含在安装程序中,就像我的应用程序的所有其他部分一样。对于运行时,我的意思是编译我的应用程序不需要程序集。所以,不需要nuget添加/更改程序集引用等。好的,您能给我们解释一下您的用例吗?我想您的机器上已经有DLL进行测试了。那么你到底需要NuGet做什么呢?对于自动构建?我们正在内部迁移到nuget,这样我们的不同开发团队将在内部管理的nuget提要中以nuget包的形式交付他们的软件。有时dll只在运行时加载。我们过去使用了一些技巧和脚本将这些dll复制到输出文件夹,并让Inno安装程序将其拾取。有了nuget,我们希望摆脱这些脚本,并向Inno Setup声明它还应该捆绑的nuget包。这似乎是一个其他人可能也感兴趣的用例:因此Inno安装程序可能需要这样的支持。好的,但NuGet是一个相当复杂的系统。它不仅提供DLL。您是否只对DLL(NuGet软件包的
lib
文件夹的内容)或其他NuGet内容感兴趣?这看起来是一个很好的解决方案。谢谢分享!