在 C# 应用程序中构建静态库

Posted

技术标签:

【中文标题】在 C# 应用程序中构建静态库【英文标题】:Building a static library in a C# application 【发布时间】:2015-11-27 09:22:20 【问题描述】:

在我的c#winforms 应用程序中,我必须使用一些从 TargetLink 模型生成的 C 代码。为此,在我的解决方案中,我已将 C 代码添加到 VC++ 项目中,并将其构建到静态库中。我添加了另一个带有 C++ 类的 VC++ 项目来连接 C# 和 C(静态库)并将其构建到 dll 中。

我有一个新要求,用户将浏览到 C 代码的位置,因为代码可能会定期更改。应用程序必须使用此代码。我想用 C++ 类和 C 代码构建一个 dll。

到目前为止,我尝试的是解析 .vcxproj 文件并将 C 文件的路径更改为新位置。我发现这很复杂,正在寻找更好的方法来做到这一点。

【问题讨论】:

硬链接可能对您有所帮助。您从已知的固定位置引用源代码,但它是一个硬链接,您可以根据他们的意愿更改 true 源代码位置(当然,如果包含的文件不会更改,只是它们的位置)。 什么? c# 应用程序在哪里涉及到这一切?问题不清楚 请查看这篇文章:***.com/questions/1835761/… 【参考方案1】:

您使用 MS Visual Studio 吗?然后,如果您为 C++ 项目编写 PreBuild 命令,如果用户所在位置存在更新版本,则覆盖源文件,它不能解决您的问题吗?

【讨论】:

当我发布可执行文件时。客户不会有VS。他想在新的 C 代码可用时构建 C 代码。所以我需要在我的应用程序中提供它作为一个特性。 @Abhishek 所以,如果我理解正确,您有一个 C# 应用程序,它使用链接静态 C 库的 C++ DLL。用户应该能够选择更新的 C 源文件位置,然后您的 C++ DLL 应该自动开始使用这些更新的代码,而不是编译时使用的代码? @codroipo:是的。正是 @Abhishek 这很难/不可能(而且不可靠)。用户应该安装了MS VC++编译器,然后你应该调用VC++编译器用正确的参数来编译静态库,然后在一个单独的程序中,因为DLL当前被进程使用所以它不能被替换,你必须调用VC++具有正确参数的编译器以重建链接到新版本静态库的 C++ DLL(因此您还必须分发 C++ DLL 源);替换 DLL 并重新启动程序。所有这一切都让你的手指交叉。 @Abhishek 一个可以接受的替代方案是使用 C DLL 而不是静态库,并在 C++ 包装器中动态加载它。当有人想要更改 C 代码时,他/她编辑它,重建 DLL 并替换它。

以上是关于在 C# 应用程序中构建静态库的主要内容,如果未能解决你的问题,请参考以下文章

CoCreateInstance 异常。在静态库上使用 REGSVR32 进行类注册?

如何使用 C++ 静态库编译 C# 应用程序?

在静态框架中使用动态库或在动态框架中使用静态库

如何在静态库项目中使用 XCode 性能工具?

Restkit 0.20:在自己的静态库中构建存档时找不到

如何在链接到静态库的 DEV-CPP 中构建控制台应用程序时解决对 _imp__** 的未定义引用?