2010-12-14 69 views
1

我有一个.Net 3.5网站项目,我在VS2010(最近移植了VS2008)以及用MSBuild和TeamCity构建/部署。我使用Msbuild工具版本3.5。该网站项目通过Interop-dll与一些COM组件进行通信。据我所知,这些interop是由Visual Studio生成的COM组件的包装。我的问题是,当应用程序生成和使用Microsoft.WebDeployments.targets部署我得到一个运行时错误消息说:构建AnyCpu的网站

无法加载文件或程序集 “Interop.cvvToolkitLib”或它 的一个依赖。试图对 加载具有不正确的 格式的程序。

在Google搜索到类似问题后,我发现很多帖子都说“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> 

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

我对MSbuild不是很有经验,所以我可能会忽略一些重要的东西。我有其他的Web应用程序(不是网站),它们与相同的COM组件进行通信时没有任何问题,所以这只是网站的一个问题。 Web应用程序是建立这样的:

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

这里我通过平台作为属性,所以我只是猜测,我需要的网站类似的东西。

回答

0

该问题已通过使用3.5版本的MSbuild解决。我使用3.5版本的4.0版本。由于某些原因导致interop dll被构建在错误的平台上。然而,我不知道为什么它会导致这个问题。我已经看到在3.5项目中使用MSbuild 4.0的几个奇怪问题。如果有人能够启发我为什么发生这些事情,我会很高兴。