gpt4 book ai didi

.net - 从非特定的 .NET 应用引用特定于平台的库

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:24:35 25 4
gpt4 key购买 nike

我经常需要在我的 C# 应用程序中包含少量 native 代码,我倾向于通过 C++/CLI 来完成。通常我只需要使用一个 C++ 库,对于 .NET 没有好的替代品;但有时性能也是一个因素。

这是有问题的;这样做意味着添加对特定 x86 或 x64 库的引用。大多数库都支持 64 位和 32 位编译,或者只需要稍作修改即可在 64 位下工作。但是,我只能引用特定 C# 项目构建目标中的一个版本。这意味着我需要为解决方案中的每个项目手动添加几个构建目标。

VS.NET 在这种情况下非常无用:如果您将 C++ 库和 C# 库添加到同一解决方案,并且 C# 和 C++ 库同时具有 32 位和 64 位目标,您的解决方案将包含“任何 CPU”目标、“混合平台”目标、x64 目标、x86 目标(C# 称为 32 位)、win32 目标(C++ 称为 32 位),也许更多;至少有两个版本(发布版和调试版,除非您添加了更多版本)。

这很快就变得一团糟,而且没有充分的理由。明显的行为不应该那么棘手:如果我有一个引用 C++ 项目的 C# 项目,那么很明显 64 位版本应该引用 64 位版本,32 位版本也类似。

最糟糕的是,所有这些都会导致两个独立但相同的可执行文件:一个任何 CPU .NET 项目都可以在 32 位和 64 位模式下不加修改地工作,但我还没有找到一种方法来加载适当的特定于平台的支持库,具体取决于应用程序的启动模式。

总结这段长篇大论:

  • 是否有可能减少在跨平台应用程序上使用 VS 的痛苦 - 使其无需手动操作即可将适当的引用添加到适当的构建目标?
  • 是否有一种简单的方法来制作具有平台特定引用的 .NET 可执行文件,它可以在 32 位和 64 位模式下运行,并根据需要加载适当的程序集?

最佳答案

您应该问自己的主要问题是,您是否需要 64 位版本。有关详细信息,请参阅 Scott Hanselman 的博客文章和 myself .

如果确实需要两个版本,也可以将 32 位和 64 位库都加载到 GAC 中,以便运行时自动选择正确的版本。

如果您不想对您的库进行 GAC,您还可以查看 this StackOverflow post ,其中描述了加载正确程序集的方法。不过我不太喜欢这个解决方案,因为它确实需要一个插件模型

关于.net - 从非特定的 .NET 应用引用特定于平台的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/597138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com