发布同时支持64位和32位的Web二进制文件?ASP.NET

发布同时支持64位和32位的Web二进制文件?ASP.NET,asp.net,64-bit,32-bit,system.data.sqlite,badimageformatexception,Asp.net,64 Bit,32 Bit,System.data.sqlite,Badimageformatexception,我想发布同时支持32位和64位的应用程序。我正在使用elmah和SQLite。这两个包都有一个单独的32位和64位二进制文件。我不能同时添加32位和64位DLL。我尝试在我的bin/release文件夹中添加具有不同文件名的32位和64位DLL,但出现错误的图像格式。(我通过在64位Windows服务器上运行目录中的DLL和32位系统进行测试) 如何发布应用程序,使同一文件夹可以32位或64位运行?不久前,我刚刚与32位和64位进行了斗争,我将对此进行一次尝试,至少通过一些一般观察。我知道这个问

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


如何发布应用程序,使同一文件夹可以32位或64位运行?

不久前,我刚刚与32位和64位进行了斗争,我将对此进行一次尝试,至少通过一些一般观察。我知道这个问题已经有一年多的历史了,但我希望这个答案无论如何都能帮助别人,不管你是否“接受”这个答案(与某些问题相比,这并不是我回答StackOverflow问题的原因)

首先,在您的情况下,32位只能在WOW64上下文中工作吗?通常会这样,这可以简化您的情况

然而,也有第三方库使WOW64不可用的情况,至少根据它们的文档,这就是我所面临的情况。为了解决这个问题,我必须有一个32位和64位的构建。如果有一种方法可以在“相同的文件夹”中释放它们,我没有找到它。然而,这样做并不太困难。我必须手工编辑VisualStudio项目文件。如果我记得的话,基本步骤是:

  • 在VisualStudio中仔细设置我的构建定义,以便版本和调试版本都正确设置了各个项目。这意味着,在我的例子中,任何与本机库交互的东西都必须以x86或x64格式构建,而不是任何CPU。据我所知,只有MSIL的项目可以是任何CPU
  • 编辑项目文件(例如.csproj),以便根据构建将正确的第三方DLL放入正确的文件夹中。如果有更简单的方法来实现这一点,我没有看到。在您的解决方案中可能有一个明显的项目文件可以实现这一点,但它确实可以在您的解决方案中的任何位置实现,只要:
  • 在实际的web项目中,请确保添加了第三方DLL副本作为参考的项目,即使web项目不直接使用此其他项目。这样,文件将被复制到构建目录。在我看来,这似乎是MSBuild或Visual Studio中的一个bug,但从VS2010开始,它似乎尚未修复。此外,如果需要将第三方DLL复制到App_Code等目录,则可能需要编辑web项目文件来完成此操作
  • 我必须在工作中查看项目文件,看看我具体做了哪些更改,但这些是基本步骤。除非您可以像任何CPU一样编译整个项目,否则我认为您将需要编译32位和64位版本,并部署所需的版本。实际代码可能不会更改,除非您使用的是本机代码或非托管代码


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

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

    首先,在您的情况下,32位只能在WOW64上下文中工作吗?通常会这样,这可以简化您的情况

    然而,也有第三方库使WOW64不可用的情况,至少根据它们的文档,这就是我所面临的情况。为了解决这个问题,我必须有一个32位和64位的构建。如果有一种方法可以在“相同的文件夹”中释放它们,我没有找到它。然而,这样做并不太困难。我必须手工编辑VisualStudio项目文件。如果我记得的话,基本步骤是:

  • 在VisualStudio中仔细设置我的构建定义,以便版本和调试版本都正确设置了各个项目。这意味着,在我的例子中,任何与本机库交互的东西都必须以x86或x64格式构建,而不是任何CPU。据我所知,只有MSIL的项目可以是任何CPU
  • 编辑项目文件(例如.csproj),以便根据构建将正确的第三方DLL放入正确的文件夹中。如果有更简单的方法来实现这一点,我没有看到。在您的解决方案中可能有一个明显的项目文件可以实现这一点,但它确实可以在您的解决方案中的任何位置实现,只要:
  • 在实际的web项目中,请确保添加了第三方DLL副本作为参考的项目,即使web项目不直接使用此其他项目。这样,文件将被复制到构建目录。在我看来,这似乎是MSBuild或Visual Studio中的一个bug,但从VS2010开始,它似乎尚未修复。此外,如果需要将第三方DLL复制到App_Code等目录,则可能需要编辑web项目文件来完成此操作
  • 我必须在工作中查看项目文件,看看我具体做了哪些更改,但这些是基本步骤。除非您可以像任何CPU一样编译整个项目,否则我认为您将需要编译32位和64位版本,并部署所需的版本。实际代码可能不会更改,除非您使用的是本机代码或非托管代码

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

    jball:Wh