在64位构建服务器上将网站项目构建为32位

时间:2010-12-20 15:23:29

标签: visual-studio-2010 msbuild

我有一个VS 2010解决方案,其中包含一个网站,其中包含一个Web服务。 Web服务引用了一个COM dll,它在我们的64位构建服务器上构建解决方案时会导致问题。我得到典型的32/64位错误:

ASPNETCOMPILER:错误ASPCONFIG:无法加载文件或程序集“xxx”或其依赖项之一。试图加载格式不正确的程序

当我使用32位aspnet_compiler构建网站时,它构建正常。那么,我如何指定一个网站应该被构建为32位? VS中的配置管理器只允许我选择任何CPU,所以我不能将它改为x86这个网站...

感谢。

6 个答案:

答案 0 :(得分:8)

您可以使用以下命令。实际上,在这种情况下,您使用ASPNetCompiler x86版本来构建自己的项目

call "C:\Program Files\Microsoft Visual Studio 2008\VC\vcvarsall.bat" x86
MSBuild MySolutiuon.sln 

您还可以将x86_amd64用于任何cpu。请注意,您可以加载配置

,而不是使用MSBuild
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <Target Name="PrecompileWeb">
     <AspNetCompiler
         VirtualPath="/MyWebSite"
         PhysicalPath="c:\inetpub\wwwroot\MyWebSite\"
         TargetPath="c:\precompiledweb\MyWebSite\"
         Force="true"
         Debug="true"
         FixedNames="True"
     />
 </Target>
</Project> 

使用上述配置你必须使用

MSBuild your.xml /p:Configuration=Release

答案 1 :(得分:1)

@Vilx,检查依赖性walker以了解它到底有多远。我的猜测是它可能会停在vjsnativ.dll。如果这是尽可能的,请尝试this workaround

否则,您将不得不追逐程序找不到的每个DLL,并将它们复制到您的程序(或其 bin )目录中。

答案 2 :(得分:0)

它不是编译问题,而是环境问题。 ASP.NET网站将始终构建为任何CPU。

但是,如果在64位计算机上加载它,默认情况下运行64位版本的IIS 无法加载COM DLL,它失败。

您需要配置IIS以在64位Windows上运行32位应用程序: http://www.microsoft.com/technet/prodtechnol/windowsserver2003/library/iis/405f5bb5-87a3-43d2-8138-54b75db73aa1.mspx

答案 3 :(得分:0)

您需要使用ASP.NET Compilation Tool (Aspnet_compiler.exe)。请查看文档末尾的“查找正确版本的Aspnet_compiler.exe”一章,它解释了如何查找该工具的32位与64位版本。

答案 4 :(得分:0)

在Visual Studio中右键单击Web项目 选择“属性”。
单击左侧的“构建”选项卡 在“常规”下,将“平台目标”更改为“x86”,因此它将始终构建为32位。

现在,当您执行此操作时,您可能会注意到“构建”选项卡上的“配置”设置为“活动(调试)”。您需要将该下拉菜单更改为您拥有的所有不同配置设置(即“发布”,“QA”,“暂存”,“演示”等)。并将相同的“平台目标”更改为“ x86“为每一个。

完成后不要忘记单击“保存”按钮 - 如果您在开发框中,请记得将其设置回“调试”。

这可能就是为什么它只能在您的机器上构建它,而不是在构建服务器上,因为构建服务器很可能设置为针对不同的配置构建 - 这是正确的,因为您不应该在构建服务器上使用“调试”配置。

答案 5 :(得分:0)

虽然这是一个老问题,但我遇到了同样的问题,我遇到了一些麻烦找到答案。

Visual Studio提供了两种开发Web应用程序的选项:网站和Web应用程序。我们的应用程序每页生成程序集,如果源更改,则会动态更新。另一方面,Web应用程序项目在visual studio中编译为一个程序集。更改源代码后,不会自动重建此程序集。本文档详细解释了这些差异:http://msdn.microsoft.com/en-us/library/aa730880(VS.80).aspx#wapp_topic5

另一个与此相关的差异是 Web应用程序项目允许您实际选择与网站项目相反的体系结构。将网站转换为Web应用程序并不是很难,但不是太简单(转换为Web应用程序的选项仅在创建... Web应用程序后才可用)。您可以采取的步骤:

  1. 创建新的Web空Web应用程序
  2. 浏览到新的Web应用程序目录并复制您网站上的所有文件(覆盖目录中的任何内容)
  3. 将所有文件添加到项目中
  4. 右键单击该项目,然后选择“转换为Web应用程序”。
  5. 可能需要解决一些名称空间问题。