InstallShield LE(使用Visual Studio 2012)完全无法检测依赖项

时间:2012-09-26 09:32:44

标签: visual-studio-2012 installshield-le

我正在做一个噩梦,试图让一个简单的安装程序在InstallShield LE(VS 2012附带的一个)中运行。我可以解决各种各样的问题(比如我不能再做“重建所有”而不会搞乱一切的事实 - 我需要在开发过程中简单地卸载InstallShield项目)。但重要的是,当我构建我的安装程序时,它包含各种DLL的错误版本(包括属于我项目的那些,以及第三方的实体框架DLL)。

执行“清理解决方案”甚至没有解决我的解决方案中的DLL的问题。它在我的机器上找到了一个随机版本(在某种编译器临时目录中),并坚持包括它。我最终通过在Windows资源管理器中进行搜索并删除它找到的每个文件来解决这个问题,但我担心下次我发布它时仍然会选择错误的文件。

另外,我需要在我的机器上同时拥有.NET 4和.NET 4.5版本的Entity Framework,并且它选择了错误的版本进入我的安装程序。我不能删除我不希望它包含的那个。

绝对是劣质产品。我可以“升级”到完整版本以查看是否能解决这些问题,但我最近使用LE版本的经历让我再次使用他们的任何产品。

还有其他人有过类似的问题吗?你找到了解决方案吗?

6 个答案:

答案 0 :(得分:18)

老帖子也许这可以帮助你或其他人解决这个令人愤怒的问题(假设你正在经历错误like -6225)。

症状:

  • 您可以(重新)构建每个项目,包括Install Shield项目
  • 但是,如果您构建解决方案(多个项目中)错误似乎只是弹出

尝试:

    在VS 2012中
  • ,右键单击您的解决方案并选择Project Build Order
  • 即使订单“看起来”正确,也要继续设置依赖关系
    • e.g。你的安装项目取决于源项目(显然,但由于这个工具不“知道”它需要一些帮助)。

我不确定这是否解决了“错误的dll”问题(我没有经历过那种痛苦......)但是检查项目输出的建议可能会有所帮助......以上确实解决了我的问题的问题。

是的,我同意,如果它甚至不能与 VS2010及以下 设置和部署项目易于使用,那么它的其中一个 - 另一个 - 开发者必须处理的学习曲线(浪费时间)。 虽然不准备称之为劣质,它确实有一些不错的(r)糖果 - 甚至是“有限”的版本....

无论如何,我希望这会有所帮助......

更新1

是的,我可以正式称之为ISLE劣质。我现在可怕的体验“丢失的dll”(忘记错误的dll,他们甚至不在intall文件夹,原谅多彩语言但WTF ?? !!)问题。 ISLE无法识别正确的依赖关系 - 我不同意之前的答案。此问题 DID NOT 与我们自VS 2005以来的内置Setup and Deployment Project一起存在。

同意关于骨头MS移动的评论。

解决此问题后,我会更新。

更新2

我的修复(如果有更好的方法,请提供答案)..所有这些都是在ISLE UI中完成的:

  1. 扫描依赖项 - 右键单击​​项目主要输出,选择Dependencies from scan at build step 1 scan to see missing dependencies

  2. 您将看到手动添加所依赖的依赖关系,由红色图标表示 step 2 identify missing dependencies
    我取消选中它们以便我可以摆脱 -6248警告这真的很奇怪,因为恕我直言应该是一个致命的错误在构建中 - 如何安装/设置可能工作,如果它缺少依赖性? 警告继续构建,但永不工作

  3. 然后(是)手动添加您在上面确定的依赖关系......

  4. BTW,不确定这是否重要 - 我使用ISLE(ISLE menu - > Visual Studio Deployment Project Import Wizard)通过导入 VS 2010安装项目启动了整个过程。我不确定这是否真的很重要 - 如果你从头开始(而不是导入),它仍然可以Dependencies from scan at build吗?

    VS2012的安装和部署中的“进展”......

    希望这有帮助!

答案 1 :(得分:3)

我最近遇到了您描述的问题:控制台应用程序正确构建,在bin目录中具有最新版本的依赖项,但在与InstallShield LE打包时,使用旧版本的依赖项DLL。

正如你所说:

  

执行“清理解决方案”甚至没有解决DLL的问题   在我的解决方案中。它在我的机器上找到了一个随机版本   (在某种编译器临时目录中),并坚持包含它。

就我而言,违规文件位于C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root和{{1}}

清除这些目录的内容解决了这个问题。

顺便说一句,我考虑过添加一个构建操作来自动清空这些目录,但是如果没有掉落所有权权限,我就无法自动执行此操作。

答案 2 :(得分:2)

每个设置工具都有问题。请注意,没有可以准确检测应用程序依赖性的工具。工具可以做的最好的就是提出建议。这就是大多数安装程序开发人员自己确定依赖关系并手动将它们包含在安装程序中的原因。

如果您对InstallShield不满意,可以尝试使用其他设置工具:http://en.wikipedia.org/wiki/List_of_installation_software

免费版的Advanced Installer包含一个Visual Studio setup project,可能会有所帮助。

答案 3 :(得分:0)

您可以通过右键单击项目并发布向导创建exe作为单个图像或您选择的任何内容来发布您的项目,而不是使用安装盾。最后它会处理所有依赖项。因此,当安装由发布向导创建的exe时比它自动安装所有依赖项如.net框架和如果你的应用程序需要一些运行时框架,它会提醒你安装那个。

你可以看看这个

http://msdn.microsoft.com/en-IN/library/31kztyey.aspx

答案 4 :(得分:0)

我的DLL出现问题。从某个地方抓起一个更老的人。 GAC中没有任何内容可用于此DLL。我尝试了一切。最后,我通过右键单击并选择添加,在“文件”部分中手动添加了darn thing(ISLE)。我在\ obj \ Release文件夹中找到了DLL。然后我再次构建了Release(SingleImage),一切正常。

答案 5 :(得分:0)

您可以通过右键单击解决方案来修复构建顺序问题(例如,当您尝试重建解决方案时) - >项目依赖关系 - >选择您的安装项目并检查它使用的项目。 (在VS2013中测试过)

我希望InstallShield项目在您选择源文件时自动设置这些依赖项,但显然它没有。