在安装项目中包含文件依赖项

Posted

技术标签:

【中文标题】在安装项目中包含文件依赖项【英文标题】:Include file dependencies in setup project 【发布时间】:2013-10-22 22:34:55 【问题描述】:

如何确保项目中的文件包含在安装程序创建的应用程序目录中?

或者换一种说法:如何?

我的 VB.NET (2010) 项目中有一个 DLL:TwinCAT.Ads.dll [具有包含],它有自己的依赖项:TcAds.dll [在我的项目中没有包含任何地方],即 不是 .NET 程序集。

我让编译器确保它在编译时将TcAds.dll 作为现有项目添加到我的项目中,然后将其构建操作设置为“嵌入式资源”并将其设置为始终复制到输出目录。

现在我已准备好发布,我已经制作了一个 Windows 安装项目。请不要建议使用 WIX 或其他任何东西,这是我必须使用的。强>

问题是 DLL 的这种弃用不会显示为依赖项,因此不会包含在安装程序中。安装后,程序运行,找不到DLL,炸了。

我尝试将其作为资源添加到项目中,但无济于事。 (项目 - 属性 - 资源) 无法将其构建操作设置为编译(它给出错误“无法打开模块文件...”) 构建操作“资源”甚至没有将其包含在 bin 文件夹中,更不用说安装程序了 将其添加为引用确实 工作(它给出错误“无法添加对 ... 的引用。请确保该文件是可访问的,并且它是一个有效的程序集或 COM 组件。”)

肯定有一种简单的方法可以确保您想要的任何文件都包含在安装目录中吗?

【问题讨论】:

我现在无法检查,但您应该可以只添加应该复制到输出文件夹中的“文件” 咦,这不是.NET 程序集吗?不知道为什么不能添加... 我最近重新访问了有问题的项目,我们最终获得了 Advanced Installer。所以我放弃了。如果有人可以解释为什么这是不可能的(如果确实是这样的话),我也会考虑满足赏金要求。也许某处有一个规范的参考。 【参考方案1】:

您可以将任意文件添加到您的安装项目。

我创建了一个安装项目并将 c++ ddl 文件添加到输出。它在安装项目文件中有以下部分。您可以通过这种方式轻松地将您的 dll 文件添加到您的项目中。如果需要,您可以编写构建后脚本将此文件复制到合适的位置,以便安装项目找到它。

"File"
        
            "1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE:_06335985DF0F4EF3A600861437AA6CDF"
            
            "SourcePath" = "8:..\\Debug\\CppWin32.dll"
            "TargetName" = "8:CppWin32.dll"
            "Tag" = "8:"
            "Folder" = "8:_1E4113F2F81040508FD1CDA54F242F25"
            "Condition" = "8:"
            "Transitive" = "11:FALSE"
            "Vital" = "11:TRUE"
            "ReadOnly" = "11:FALSE"
            "Hidden" = "11:FALSE"
            "System" = "11:FALSE"
            "Permanent" = "11:FALSE"
            "SharedLegacy" = "11:FALSE"
            "PackageAs" = "3:1"
            "Register" = "3:1"
            "Exclude" = "11:FALSE"
            "IsDependency" = "11:FALSE"
            "IsolateTo" = "8:"
            
        

查看我的构建输出。

------ Build started: Project: ConsoleApplication1, Configuration: Debug x86 ------
  ConsoleApplication1 -> P:\denemeler\setupDeneme\Setup1\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe
------ Starting pre-build validation for project 'Setup1' ------ 
------ Pre-build validation for project 'Setup1' completed ------
------ Build started: Project: Setup1, Configuration: Debug ------
Building file 'P:\denemeler\setupDeneme\Setup1\Setup1\Debug\Setup1.msi'...
Packaging file 'CppWin32.dll'...
Packaging file 'ConsoleApplication1.exe'...
========== Build: 2 succeeded or up-to-date, 0 failed, 0 skipped ==========

【讨论】:

以上是关于在安装项目中包含文件依赖项的主要内容,如果未能解决你的问题,请参考以下文章

如何在 android 库 gradle 项目中包含依赖项?

在 jersey 项目中包含 jersey-bom 导入范围依赖项的目的是啥?

Webpack 在 bundle 中包含自己的依赖项

在我的构建输出中包含 Nuget 依赖项?

使用 Maven Surefire 运行依赖项 jar 中包含的 JUnit 测试

如何在清单文件中包含 Maven 依赖项