37

我正在做一场噩梦,试图让一个简单的安装程序在 InstallShield LE(VS 2012 附带的那个)中工作。有各种各样的问题我可以解决(比如我不能再做“全部重建”而不把一切搞砸——我需要在开发过程中简单地卸载 I​​nstallShield 项目)。但最重要的是,当我构建我的安装程序时,它包含了各种 DLL 的错误版本(包括我项目中的那些,以及 Entity Framework DLL 等第 3 方的)。

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

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

多么劣质的产品。我可以“升级”到完整版本,看看是否能解决这些问题,但我最近使用 LE 版本的经验让我再也无法使用他们的任何产品。

有没有其他人有类似的问题?你找到解决办法了吗?

4

6 回答 6

19

旧帖子,所以也许这可以帮助您或其他人解决这个令人发指的问题(假设您遇到 -6225 之的错误)。

症状:

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

尝试:

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

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

是的,我同意,如果它甚至无法与VS2010 及以下 设置和部署项目的易用性相提并论,那么它就是开发人员必须处理的另一个学习曲线之一(浪费时间)。虽然不准备称它为伪劣,但它确实有一些不错的(r)糖果 - 甚至是“有限”版本......

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

更新 1

是的,我确实可以正式称 ISLE 为劣质品。我现在正经历着可怕的“缺少 dll”(忘记错误的 dll,它们甚至不在 intall 文件夹中,请原谅五颜六色的语言,但是 WTF??!!)问题。ISLE 无法识别正确的依赖关系——我不同意前面的答案。这个问题在我们自 VS 2005 以来的内置中不存在。Setup and Deployment Project

同意关于傻瓜 MS 移动的评论。

一旦我解决了这个问题,我会更新。

更新 2

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

  1. 扫描依赖项-右键单击项目主输出,选择Dependencies from scan at build 第 1 步扫描以查看缺少的依赖项

  2. 您将看到必须手动添加的依赖项,由红色图标指示 步骤 2 识别缺失的依赖项
    我未选中它们,因此我可以摆脱-6248 警告,这真的很奇怪,因为恕我直言,这应该是构建中的致命错误 - 如何安装/setup 如果缺少依赖项可能会起作用??警告会继续构建,但它永远不会起作用

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

顺便说一句,不确定这是否重要 - 我通过使用 ISLE ( -> )导入VS 2010 安装项目来开始整个过程​​。我不确定这是否真的重要 - re:如果你从头开始(而不是导入)它仍然能够吗?ISLE menuVisual Studio Deployment Project Import WizardDependencies from scan at build

VS2012 的设置和部署中的“进展”如此之多......

希望这可以帮助!

于 2013-04-23T02:38:49.267 回答
3

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

正如你所说:

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

就我而言,有问题的文件位于ASP.NET 动态编译缓存C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\rootC:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root

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

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

于 2013-09-16T13:26:47.023 回答
2

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

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

Advanced Installer 的免费版本包括一个Visual Studio 安装项目,它可能会有所帮助。

于 2012-09-27T07:13:37.877 回答
0

我的 DLL 有问题。它正在从某个地方抓起一个年纪大得多的人。GAC 中没有此 DLL 的内容。我什么都试过了。最后,我只是通过右键单击并选择添加在“文件”部分手动添加了该死的东西(ISLE)。我在我的 \obj\Release 文件夹中找到了 DLL。然后我再次构建了版本(SingleImage),一切正常。

于 2013-06-13T20:19:01.857 回答
0

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

你可以看看这个

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

于 2013-05-09T06:32:29.550 回答
0

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

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

于 2015-10-09T00:31:52.033 回答