不需要安装程序的情况下发布Visual Studio 2013

6
我有一个WPF项目,想要发布该程序但不需要安装程序。基本上,我希望将程序编译到一个目录中,并将所有必要的文件放在旁边,以便我可以压缩所有内容并将程序部署到客户端。
理想情况下,我希望将所有外部资源编译到EXE文件中。
有没有办法做到这一点?如果我进入我的工作站上的debug/bin文件夹,我可以执行EXE文件,但是如果我将其与DLL文件一起压缩并尝试在另一台机器上运行它,则会崩溃,我猜测可能是缺少文件。(如果使用安装程序发布就可以工作,但对于这个项目来说不合适)。
谢谢 Steve 编辑: 当我执行程序(从成功构建后的Bin目录中复制的程序)时,什么都没有发生,只有“程序已停止工作”的消息。我的程序使用3个外部文件,一个图标、一个图像和一个字体。我引用了一个DLL(WPFtoolkit),我将该DLL添加到我的解决方案资源管理器中的一个目录中。所有文件都设置为嵌入式资源,并且“不复制”。我还添加了这段代码到我的程序中,但仍然出现相同的错误。http://codeblog.larsholm.net/2011/06/embed-dlls-easily-in-a-net-assembly/我的EXE的大小是正确的,我可以看到DLL已被“添加”到其中。但程序仅在我的工作站上运行:(
编辑: 我应该保留引用中的DLL吗?我的猜测是否定的,但如果我这样做,当我调用我的时候会出错:
using Microsoft.Windows.Controls;

如果我不调用它,程序会编译通过但会崩溃。请参见以下错误信息:
Problem signature:
  Problem Event Name:   CLR20r3
  Problem Signature 01: sw imperium.exe
  Problem Signature 02: 1.0.0.0
  Problem Signature 03: 53bdd468
  Problem Signature 04: PresentationFramework
  Problem Signature 05: 4.0.30319.18408
  Problem Signature 06: 52312f13
  Problem Signature 07: a19
  Problem Signature 08: 46
  Problem Signature 09: System.Windows.Markup.XamlParse
  OS Version:   6.1.7601.2.1.0.256.1
  Locale ID:    1033
  Additional Information 1: 0a9e
  Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
  Additional Information 3: 0a9e
  Additional Information 4: 0a9e372d3b4ad19135b953a78882e789

你所说的“崩溃”是什么意思?实际的错误信息可能有助于诊断。你是试图直接从压缩包运行可执行文件吗?目标计算机是否安装了正确的 .Net 框架? - Steve B
是的,客户已经安装了.NET。当我执行程序时,什么也没有发生,只有“程序已停止工作”的消息。我的程序使用3个外部文件,一个图标、一个图片和一个字体。我有一个DLL(WPFtoolkit)被引用,我将该DLL添加到解决方案资源管理器中的一个目录中。所有文件都设置为嵌入式资源,并且“不复制”。我还添加了这段代码到我的程序中,但仍然出现相同的错误。http://codeblog.larsholm.net/2011/06/embed-dlls-easily-in-a-net-assembly/ - user3617652
你有能够使用 VS 2013 的另一台机器并且环境与客户端类似的权限吗?我会尝试将代码复制到不同的带有代码的机器上,然后在你尝试从实际机器构建应用程序时附加调试器。当应用程序中断时,它会指向实际断点所在的行。 - Sandesh
你能分享你的代码(或者展示你问题的样例代码)以及对应的x86二进制文件吗? 你也提到了Debug\bin文件夹。你尝试使用发布版本吗?由于缺少调试运行时dll,有时会在目标上崩溃。 - Abhinav
这个SO答案可能会为看起来类似的问题提供一些信息。 - bart s
3个回答

1

1
你可能需要阅读this文章,查看是否有缺失的依赖项并对应用程序进行分析。
PS:如果没有帮助,请尝试在问题中添加更多信息,例如示例代码和/或二进制文件。

1

您的电脑上(Visual Studio所在的位置)是否安装了工具包?所有未作为嵌入式资源包含的文件都应该是复制本地的(在这种情况下,构建将把这些文件复制到bin文件夹中)。

为了隔离问题并获得更好的错误消息,请将代码移动到非开发人员PC,并启用融合日志记录器以查找加载程序无法找到的任何程序集。

有关加载器(fusion)记录器的更多信息,请参见以下链接 如何在.NET中启用程序集绑定失败日志记录(Fusion)

考虑向应用程序启动添加一些额外的错误日志记录代码,请参见 .NET应用程序无法启动和接收XamlParseException


1
是的,工具包已安装在开发人员的计算机上。正如我所说,如果我发布项目并创建安装程序,则可以轻松部署,它可以成功安装并且程序也能正常运行。 - user3617652
1
如果安装程序正常工作,请使用以下方法从安装程序中提取文件以查看您缺少哪个文件。无论如何,您都应该使用安装程序。msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractTo - Mike Beeler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接