使用TeamCity构建服务器在.NET 4.0 ASP.Net解决方案+ google-api-dotnet-client中构建错误

时间:2014-12-17 08:51:59

标签: asp.net teamcity google-api-dotnet-client

我们已从TFS 2010迁移到TeamCity,我们在构建解决方案文件时遇到了问题。

我们正在使用.NET 4.0。 谷歌图书馆在尝试构建时会出现.NET 4.0 + system.net.http的问题。 我们设法让这个设置在TFS(它使用MSBuild 4.0)上运行而没有错误。

App.config应该有正确的程序集:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.6.9.0" newVersion="2.6.9.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.6.9.0" newVersion="2.6.9.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.2.28.0" newVersion="2.2.28.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.2.28.0" newVersion="2.2.28.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

我们已经尝试过: - 使用不同的跑步者类型:Visual studio,MSbuild - 直接引用所有Dll(google + system.net.http +等) - 在这些DLL上使用直接Nuget包恢复(它恢复一切正常)

构建错误是: ResolveAssemblyReference] C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets(1635,5):警告MSB3268:主要参考&#34; Google.Apis.Auth.PlatformServices,Version = 1.9.0.26016,Culture = neutral,processorArchitecture = MSIL&#34;无法解决,因为它间接依赖于框架程序集&System; Net.Net.Http,Version = 2.2.22.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a&#34;这在目前的目标框架中无法解决。 &#34; .NETFramework,版本= 4.0版&#34 ;.要解决此问题,请删除引用&#34; Google.Apis.Auth.PlatformServices,Version = 1.9.0.26016,Culture = neutral,processorArchitecture = MSIL&#34;或者将您的应用程序重新定位到包含&#34; System.Net.Http,Version = 2.2.22.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a&#34;。

的框架版本

其次是: [07:58:29] W:[MSBuild输出] C:\ BuildAgent \ work \ dda43f1992063b18 \ Integrations \ CalendarSync \ Devices \ Google Calendar \ GoogleCalendarDevice.vb(788,78):错误BC30009:汇编需要参考&#39 ; Google.Apis,Version = 1.9.0.23042,Culture = neutral,PublicKeyToken = null&#39;包含已实施的界面&#39; Google.Apis.Requests.IDirectResponseSchema&#39;。在项目中添加一个。 [C:\ BuildAgent \工作\ dda43f1992063b18 \集成\ CalendarSync \ Severa.Integrations.CalendarSync.vbproj]

1 个答案:

答案 0 :(得分:1)

我们现在对这个问题有非最佳解决方案。 MsBuild从以下位置找到了错误的版本:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0

C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Packages\Microsoft.Net.Http.2.0.20710.0\lib\net40

C:\Program Files (x86)\Microsoft Web Tools\Packages\Microsoft.Net.Http.2.0.20710.0\lib\net40

这是错误的,因为这些位置的版本是:1.0.0.0。 如果我们用2.2.28版本替换所有这些地方它的工作原理.. 我们尝试过以下方法:

  • Compliation.config添加程序集
  • Web.config bindingredirect
  • Sln文件提示正确的包..

不幸的是,我们的TC代理处于共享环境中,因此我们无法在所有这些位置替换此文件。

有什么想法吗?