c# - 让 C# 和 C++ 一起玩得很好

标签 c# c++ .net windows-installer

我有一个通过 COM 访问 c++ 项目的 c# 解决方案。该项目必须针对特定处理器,在本例中为 x64。我正在使用 Windows 安装程序来安装应用程序。

我遇到的第一个问题是安装时没有正确注册c++ dll,程序无法访问它。我通过将 c++ 项目添加到解决方案中解决了这个问题。

有一段时间这行得通,一切都安装正确,但后来我在尝试构建时开始收到以下警告:

The target version of the .NET Framework in the project does not match the .NET Framework launch condition version '.NET Framework 3.5'. Update the version of the .NET Framework launch condition to match the target version of the.NET Framework in the Advanced Compile Options Dialog Box (VB) or the Application Page (C#, F#).

如果我试图忽略警告,安装程序将不会安装。经过一番搜索,我发现 c++ 项目是在 .NET 4.0 中构建的,而我的解决方案使用的是 .NET 3.5。我尝试将我的解决方案更改为 4.0,但由于某种原因它停止工作,所以我将 c++ 更改为 3.5。

这适用于几个构建,但随后我开始收到以下错误:

Error: LNK1104 cannot open file 'mfc90.dll'. 

我将文件添加到附加依赖项部分,但随后发生另一个链接错误 (mfcs90.dll),添加该错误时,我遇到了 x86 x64 冲突。

我不确定为什么这些解决方案工作了一段时间然后就停止了,而且我似乎无法在任何有效的步骤中找到解决方案。如果有人看到过与此类似的内容,将不胜感激。

最佳答案

为了包含 Microsoft 运行时 dll,您不应简单地将 dll 包含在您的应用程序目录中。当 dll 具有各种依赖关系并且您可能会遇到不同的冲突和版本控制问题时,这将无济于事。

我建议为您的应用程序安装运行时 dll 的方法是在您的 MSI 中包含官方合并模块。

有关重新分发运行时库的选项,请参阅以下链接:

http://msdn.microsoft.com/en-us/library/ms235316(v=vs.90).aspx

关于c# - 让 C# 和 C++ 一起玩得很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15818978/

相关文章:

c++ - 如何在完美转发中有效地将右值引用转为左值

c# - 动态添加字典中的键

c# - Dispatcher.Dispatch 在 UI 线程上

c# - 在 c# wpf 中使用 pop3 接收邮件到私有(private)邮件服务器时出错

c# - 触发器中无法识别 Setter TargetName 'ContentPresenter'

c# - 奇怪的突然错误 "The number of bytes to be written is greater than the specified ContentLength"

c# - .NET Standard DLL 二进制是否与 .NET Framework 兼容?

c# - 未处理的异常终止执行时退出代码?

c++ - 无法获得boost::spirit解析器和词法分析器,用于除std::string或int或double以外的 token 类型

c++ - 函数中的内存释放 (C++)