2010-07-20 67 views
3

我有一个在Visual Studio Express 2010中创建的C#项目。此程序使用依赖/调用C++ dll的第三方C#类。我只是将filename.dll复制到项目文件夹的bin/debug和bin/release文件夹中,并且应用程序运行良好。C#项目2010,在其他计算机上的独立可执行文件

我假设我可以将该项目的发行版可执行文件复制到另一台计算机并运行它,只要filename.dll与可执行文件在同一目录中即可。但是,在安装了正确框架的另一台计算机上尝试此操作时,该程序会因system.dllnotfoundexception而崩溃。

奇怪的是,我的朋友报告说,该程序在安装了Visual Studio的计算机上运行,​​但没有没有,尽管我没有真正看到这个。

这可能是什么原因造成的?我怎样才能让发行版可执行文件在另一台机器上运行?

感谢您的回复! -Chase

+1

检查是否有任何有用的错误消息 – 2010-07-20 07:04:06

回答

1

如果你的C++ DLL是由Visual Studio它可能依赖于CRT构建,两件事情要检查这里:

  • 如果它取决于释放或调试CRT。除了调试目的,Microsoft不会授予您分发调试版本的权利,因此可能会造成问题。
  • 女巫版这取决于
    • 从VS2010的最后一个版本可以在同一目录中的可执行文件(msvcp100.dll用于C++ msvcr100被复制。dll对于C)
    • 以前的版本需要作为并行程序集安装,因此必须安装它们才能运行它们的安装程序(某些版本,如VS2005,其中一些版本包含在框架安装中,但其他版本如VS2005 SP1需要安装单独)

在任何情况下调试此类问题的最好的办法就是有问题的计算机上安装Dependency Walker(免费),让它告诉你缺什么DLL。

4

确保您安装了Visual C++运行时(VS2005,VS2008,VS2010)。

0

最简单的(尽管可能不是最好的)解决方案是将解决方案添加到您的解决方案。安装项目将帮助您找到任何依赖关系,并在安装过程中使其可用。

你需要采取的步骤如下:

  1. 安装项目添加到您的解决方案(在添加项目中找到... /安装模板)
  2. 右键单击该项目,选择“添加/项目输出...“并添加程序的启动项目。
  3. 右键单击该项目并选择“查看/自定义操作”。
  4. 右键单击根节点,选择“添加自定义操作...”,然后从“应用程序文件夹”中添加“来自[您的项目名称]的主输出”。

现在编译时,会创建一个.msi安装程序。在另一台计算机上运行此安装程序,并且您的程序将被安装并可运行。要卸载,请再次运行安装程序,或从“控制面板”下的“添加/删除程序”中删除该程序。

相关问题