为AnyCpu构建网站

时间:2010-12-14 09:12:30

标签: msbuild web interop

我有一个.Net 3.5网站项目,我正在VS2010中开发(最近从VS2008移动)并使用MSBuild和TeamCity构建/部署。我正在使用Msbuild工具版本3.5。该网站项目通过Interop-dll与几个COM组件进行通信。据我所知,这些互操作由Visual Studio生成,作为COM组件的包装器。我的问题是,当使用Microsoft.WebDeployments.targets构建和部署应用程序时,我收到一条运行时错误消息:

  

无法加载文件或程序集   'Interop.cvvToolkitLib'或其中一个   依赖。试图做到   加载程序不正确   格式。

在谷歌上搜索类似的问题之后,我发现很多帖子说“AnyCpu”的构建应该解决这个问题,因为生成interops的工具默认为x86。

所以我打开了我的构建脚本并尝试将平台指定为AnyCpu:

<Platform>AnyCPU</Platform>

还是同样的问题。更多的谷歌搜索暗示它可能是“AnyCpu”或“任何CPU”,所以我尝试了两者。仍然没有运气。其他论坛帖子建议这样:

<ItemGroup>
    <ConfigurationToBuild Include="Release|Any CPU">
      <FlavorToBuild>Release</FlavorToBuild>
      <PlatformToBuild>Any CPU</PlatformToBuild>
    </ConfigurationToBuild>
  </ItemGroup>

<PlatformTarget>AnyCPU</PlatformTarget>

错误保持不变。所以我向你提出的问题是:我在尝试为任何CPU构建网站时做错了什么,或者解决方案是否可能在其他地方?我是否必须将一些参数明确传递给<CallTarget Targets="Build"/>

我对MSbuild不太熟悉,所以我可能会忽略一些重要的事情。我有其他Web应用程序(不是网站)与相同的COM组件通信没有任何问题,所以这只是网站的问题。 Web应用程序的构建如下:

<MSBuild
      Projects="$(ProjectFile)"
      StopOnFirstFailure="true"
      Targets="ResolveReferences;_CopyWebApplication;_BuiltWebOutputGroupOutput"
      Properties="...Platform=AnyCPU..." />

在这里,我将平台作为属性传递,所以我只是猜测我需要类似于网站的东西。

1 个答案:

答案 0 :(得分:0)

使用3.5版本的MSbuild解决了这个问题。我使用4.0版本的3.5版本。由于某些原因导致interop dll建立在错误的平台上。但我不知道为什么会导致这个问题。我已经看到使用MSbuild 4.0进行3.5项目的几个奇怪问题。如果有人能告诉我为什么会发生这些事情,我会很高兴。