2010-12-14 89 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的幾個奇怪問題。如果有人能夠啓發我爲什麼發生這些事情,我會很高興。