1

我想发布我的应用程序同时支持 32 位和 64 位。我正在使用 elmah 和 SQLite。这两个软件包都有一个单独的 32 位和 64 位二进制文​​件。我不能同时添加 32 位和 64 位 DLL。我尝试在我的 bin/release 文件夹中添加具有不同文件名的 32 位和 64 位 DLL,但出现错误的图像格式错误。(我通过在 64 位 Windows 服务器上运行并在目录中和我的系统上运行 32 位 DLL 进行了测试)。

我如何发布应用程序,以便可以将同一文件夹作为 32 位或 64 位运行?

4

1 回答 1

1

不久前刚刚与 32 位与 64 位进行了斗争,我将对此进行尝试,至少有一些一般性的观察。我知道这个问题已有一年多的历史了,但我希望答案对某人有所帮助,无论您是否“接受”答案(与某些人相比,这不是我在 StackOverflow 上回答问题的原因)。

首先,在您的情况下,仅 32 位可以在 WOW64 环境中工作吗?通常它会,这可以简化你的情况。

但是,在某些情况下,第三方库使 WOW64 无法运行,至少根据他们的文档,这是我所面临的情况。为了解决这个问题,我必须同时拥有 32 位和 64 位版本。如果有办法以某种方式在“相同文件夹”中释放它们,我没有找到它。不过,要做到这一点,真的不是太难。我确实必须手动编辑 Visual Studio 项目文件。如果我记得,基本步骤是:

  1. 在 Visual Studio 中仔细设置我的构建定义,以便发布和调试版本都正确设置了各个项目。这意味着,就我而言,任何与本机库交互的东西都必须以 x86 或 x64 格式构建,而不是任何 CPU。据我所知,仅 MSIL 的项目可以是任何 CPU。
  2. 编辑您的项目文件(例如,.csproj),以便根据构建将正确的第三方 DLL 放入正确的文件夹中。如果有更简单的方法可以做到这一点,我没有看到。您的解决方案中可能有一个明显的项目文件会发生这种情况,尽管它确实可以在您的解决方案中的任何地方发生,只要:
  3. 在您的实际 Web 项目中,请确保添加具有第三方 DLL 副本的项目作为参考,即使该 Web 项目不直接使用此其他项目。这样,文件将被复制到您的构建目录。对我来说,这似乎是 MSBuild 或 Visual Studio 中的一个错误,但从 VS2010 开始,它似乎还没有得到修复。此外,如果您需要将第三方 DLL 复制到 App_Code 等目录,您可能需要编辑 Web 项目文件来完成此操作。

我必须在工作中查看项目文件并查看我具体做了哪些更改,但这些是基本步骤。除非您可以将整个项目编译为 Any CPU,否则我认为您将需要编译 32 位和 64 位版本并部署您需要的版本。除非您使用本机或非托管代码,否则您的实际代码可能不会更改。

有人可能会比我更了解这一点,但我希望这对某人有所帮助。我将尝试回答评论中留下的任何问题。

于 2011-04-10T03:20:27.300 回答